在 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)
最佳答案
由于在调用此函数时,已经检索了模型实例,因此您只需 Hook 该检索并使模型实例在当前请求上下文中可用,以便您可以在有请求的任何地方轻松使用它:
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
的字段选择。
关于python - Django 管理员自定义选择表单字段选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56680592/