我想在列表页面上使用django的管理过滤器。 我的模型是这样的:
class Location(model):
name = CharField()
class Inquiry(Model):
name = CharFiled()
location = ManyToManyField(Location)
现在我想过滤查询,只显示包含特定Location对象关系的那些。如果我使用
class InqAdmin(ModelAdmin):
list_filter = ['location', ]
admin.site.register(Inquiry, InqAdmin)
管理页面会显示所有Locations
的列表并允许过滤。
我想得到的是,只获取那些与它们有一些Inquiries
的位置的列表(因此我不会在过滤后获得空列表结果)。
如何做到这一点?
答案 0 :(得分:1)
您可以为位置创建自定义管理器,该管理器仅返回具有与之关联的查询的位置。如果您将其设为默认管理员,则管理员将使用它。
唯一需要注意的是,您需要创建另一个经理,该经理会返回所有位置,并在您想要检索没有关联查询的位置时在应用的其余部分使用该位置。
The managers section in the Django docs非常好,应该只需要设置它就可以了。
修改强>
sienf提出了一个很好的观点。另一种实现此目的的方法是定义django.contrib.admin.SimpleListFilter
的子类,并编写queryset
方法以过滤掉具有空位置的查询。见https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter