Django Admin按一对多关系过滤

时间:2018-06-14 01:45:36

标签: django python-3.x

我想创建一个过滤器,以便我可以看到(反向外键??字段是否为空)。

例如:

班级订单:

  • 订单ID

Class OrderLineItem:

  • orderLineItemId
  • 的productId
  • 日期
  • orderForeignKey
  • embroidery_name

在订单的列表视图页面上,我希望能够根据订单的订单项是否包含embroidery_name来过滤订单...

1 个答案:

答案 0 :(得分:0)

最好通过在评论中实施SimpleListFilter作为Parth Modi提及,然后在list_filter类中指定OrderAdmin属性来实现。

例如:

class EmptyEmbroideryNameFilter(admin.SimpleListFilter):

    title = 'Embroidery Name'
    parameter_name = 'embroideryname'

    def lookups(self, request, model_admin):
        return [('not_set', 'Not set')]

    def queryset(self, request, queryset):
        if self.value() == 'not_set':
            return queryset.filter(
                orderlineitem__embroidery_name__isnull=True
            )

然后在你的OrderAdmin课程中:

class OrderAdmin(admin.ModelAdmin):

    list_filter = (EmptyEmbroideryNameFilter, )

然后,您应该会在管理页面的右侧显示一个侧边栏,您可以在其中过滤Order s而没有OrderLineItem的{​​{1}}。