Django 创建自定义 list_filter

Django creating a custom list_filter

我想在 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)
    .....

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

Pavimentacao.objects.filter(env_emp__isnull=True)

在您的 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

上找到更多信息