[英]Django admin custom choice formfield choice
在django管理員中,如果數據庫中的字段為None或具有值,但我無法創建自定義選項,但我無法使其正常工作,則只能獲取整個查詢集,但無法獲取數據ID,因此我可以過濾請求。
有什么建議么?
def formfield_for_choice_field(self, db_field, request, **kwargs):
ordered = False
qs = self.get_queryset(request)
for query in qs:
if query:
if query.order:
ordered = True
if db_field.name == "status":
if ordered:
kwargs['choices'] = (
('Ordered', 'Ordered'),
('Shipped', 'Shipped'),
('Delivered', 'Delivered'),
('Late', 'Late'),
('Never Arrived', 'Never Arrived'),
)
else:
kwargs['choices'] = (
('Shipped', 'Shipped'),
('Delivered', 'Delivered'),
('Late', 'Late'),
('Never Arrived', 'Never Arrived'),
)
return super(xxxxxx, self).formfield_for_choice_field(
db_field, request, **kwargs)
由於在調用此函數時,已經檢索到了模型實例,因此您可以掛鈎該檢索,並使模型實例在當前請求上下文中可用,以便可以在有請求的任何地方輕松使用它:
def get_object(self, *args, **kwargs):
request._admin_obj = super(xxxxxx, self).get_object(*args, **kwargs)
return request._admin_obj
def formfield_for_choice_field(self, db_field, request, **kwargs):
if db_field.name == "status":
obj = request._admin_obj
if obj and obj.order:
kwargs['choices'] = # ordered_choices
else:
kwargs['choices'] = # unordered_choices
return super(xxxxxx, self).formfield_for_choice_field(
db_field, request, **kwargs)
另一種方法是在管理員中使用自定義ModelForm
並覆蓋其__init__
以修改基於字段選擇的self.instance
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.