Django管理后台:显示过滤后的项目列表
我正在做一个Django的后台管理界面,里面有一个模型,这个模型里有一个外键。在这个外键的字段中,当我查看管理页面时,会出现一个下拉菜单。请问有没有办法让这个下拉菜单只显示那些is_active=1的选项呢?
谢谢!
2 个回答
0
根据文档
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)
如果你需要访问当前对象,可以查看这个如何在Django管理页面中获取实际对象ID(在formfield_for_foreignkey内部)?
3
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)