Filtering Django Admin by Null/Is Not Null

后端 未结 7 1426
太阳男子
太阳男子 2020-12-16 15:03

I have a simple Django model like:

class Person(models.Model):
    referrer = models.ForeignKey(\'self\', null=True)
    ...

In this model\

7条回答
  •  遥遥无期
    2020-12-16 15:41

    there is a simple way:

    class RefererFilter(admin.SimpleListFilter):
        title = 'has referer'
        # Parameter for the filter that will be used in the URL query.
        parameter_name = 'referer__isnull'
    
        def lookups(self, request, model_admin):
            return (
                ('False', 'has referer'),
                ('True', 'has no referer'),
            )
    
        def queryset(self, request, queryset):
            if self.value() == 'False':
                return queryset.filter(referer__isnull=False)
            if self.value() == 'True':
                return queryset.filter(referer__isnull=True)
    

    Then just used them in ModelAdmin:

    class PersonAdmin(admin.ModelAdmin):
        list_filter =  (RefererFilter,) 
    

提交回复
热议问题