Django创建自定义list_filter

时间:2019-02-18 10:34:18

标签: django foreign-keys django-admin django-admin-filters

我想在AvariaAdmin上创建一个自定义list_filter,以检查env_emp是否为空,我不知道该怎么做

我的模型

class Avaria(models.Model):
    .......
class Pavimentacao(models.Model):

    avaria = models.ForeignKey(Avaria, related_name='AvariaObjects',on_delete=models.CASCADE)
    env_emp= models.DateField(blank=True,null=True)
    .....

2 个答案:

答案 0 :(得分:1)

在您的admin.py文件中,使用以下内容注册Avaria模型:

class EmptyDateFilter(admin.SimpleListFilter):
    title = _('empty date')
    parameter_name = 'env_emp'

    def lookups(self, request, model_admin):
        return (
            ('all', 'All'),
            ('has_no_date', 'Has no date')
        )

    def queryset(self, request, queryset):
        value = self.value()
        if value == 'all':
           return queryset
        isnull = (value == "has_no_date")
        return queryset.filter(AvariaObjects__env_emp__isnull=isnull)

@admin.register(Avaria)
class AvariaAdmin(admin.ModelAdmin):
    list_filter = (EmptyDateFilter, )

您可以在list_filter documentation

上找到更多信息。

答案 1 :(得分:0)

您可以使用isnull字段查找来检查可为空字段是否为空:

Pavimentacao.objects.filter(env_emp__isnull=True)