【发布时间】:2011-04-18 17:00:28
【问题描述】:
我正在开发一个 django 管理界面,并且我有一个具有外键的模型。在该字段中,查看管理页面时会出现一个下拉菜单。有没有办法仅在 is_active=1 的情况下过滤下拉结果?
问候,
【问题讨论】:
我正在开发一个 django 管理界面,并且我有一个具有外键的模型。在该字段中,查看管理页面时会出现一个下拉菜单。有没有办法仅在 is_active=1 的情况下过滤下拉结果?
问候,
【问题讨论】:
limit_choices_to 是你所追求的。
如果您只想在 ModelAdmin 中进行有限的选择,您应该相应地调整您的 ModelForm。
应该这样做:
class YourAdminForm(forms.ModelForm):
class Meta:
model = YourModel
def __init__(self, *args, **kwargs):
super(YourAdminForm, self).__init__(*args, **kwargs)
qs = self.fields['your_fk_field'].queryset
self.fields['your_fk_field'].queryset = qs.filter(is_active=1)
【讨论】:
根据docs
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "car":
kwargs["queryset"] = Car.objects.filter(is_active=1)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
如果您需要访问当前对象,请查看How do I get the actual object id in a Django admin page (inside formfield_for_foreignkey)?
【讨论】: