【问题标题】:Django admin filter on null date空日期的 Django 管理员过滤器
【发布时间】:2025-12-26 05:15:11
【问题描述】:

django admin 上的日期过滤选项是:

任何日期 今天 过去 7 天 这个月 今年

添加过滤空白日期的“无”的最简单方法是什么?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    认为您正在寻找 __isnull 后缀。例如:

    >>> mymodels = MyModel.objects.filter(mydate__isnull=True)
    >>> mymodels[0].mydate
    (no response)
    >>>
    

    【讨论】:

    • 有没有办法在管理界面的过滤器中使用它?
    • 哦,我现在明白你的问题了。抱歉,不,没有办法。
    【解决方案2】:

    您必须注册自己的过滤器 - 查看 Custom Filter in Django Admin on Django 1.3 or belowhttp://twigstechtips.blogspot.com/2010/10/django-create-custom-admin-model-filter.html 或许多其他地方以了解如何完成。

    关于您的特殊要求,http://djangosnippets.org/snippets/1963/ 处的“IS NULL/IS NOT NULL”过滤器的 sn-p

    【讨论】:

    【解决方案3】:

    我刚刚为此编写了一个自定义过滤器。它扩展了 Django 管理员的默认 DateTimeListFilter 并添加了“None”和“Not None”选项,它们会按照您的想法执行。

    https://djangosnippets.org/snippets/10566/

    你可以继续使用它:

    class MyAdmin(ModelAdmin):
        list_filter = (('my_date_field', DateFieldListFilterOrNull),
                      )
    

    【讨论】:

    • 这是一个很好的解决方案。但在 1.11 中不需要它,因为“有日期”和“无日期”选项已经内置。