python - 如何扩展 Django 管理员的 DateFieldListFilter 类?

标签 python django django-admin

我是 Django 的新手,我有一个带有日期时间字段的模型,该字段显示在 Django 管理中。

在 list_filter 选项中,当我指定字段名时,我得到了具有 4 个链接(今天、本月、过去 7 天等)的日期字段的基本 Django 过滤器界面

我现在想添加一个“ future 7 天”选项。这将需要通过扩展 DateFieldListFilter 类进行细微调整。但是,Django 抛出系统检查 (admin.E114) The value of 'list_filter[0]' must not inherit from 'FieldListFilter'。当我尝试扩展它时。

经过一番搜索后,唯一可行的方法似乎是扩展 SimpleListFilter 类,但对于这么小的东西来说似乎需要做很多工作。 (因为我将不得不复制已在 DateFieldListFilter 中处理的功能)

有没有更简单的方法来实现这一点?

最佳答案

假设我们有一个名为 Book 的模型,它有一个 published_at 字段,它是一个 DateTimeField。然后,您可以通过执行以下操作来实现这种类型的过滤(代码基于 DateFieldListFilter,如 https://github.com/django/django/blob/4ad2f862844d35404e4798b3227517625210a72e/django/contrib/admin/filters.py 中所示):

import datetime

from django.contrib import admin
from django.contrib.admin.filters import DateFieldListFilter
from django.utils.translation import gettext_lazy as _


class MyDateTimeFilter(DateFieldListFilter):
    def __init__(self, *args, **kwargs):
        super(MyDateTimeFilter, self).__init__(*args, **kwargs)

        now = timezone.now()
        # When time zone support is enabled, convert "now" to the user's time
        # zone so Django's definition of "Today" matches what the user expects.
        if timezone.is_aware(now):
            now = timezone.localtime(now)

        today = now.date()

        self.links += ((
            (_('Next 7 days'), {
                self.lookup_kwarg_since: str(today),
                self.lookup_kwarg_until: str(today + datetime.timedelta(days=7)),
            }),
        ))

class BookAdmin(admin.ModelAdmin):
    list_filter = (
        ('published_at', MyDateTimeFilter),
    )

关于python - 如何扩展 Django 管理员的 DateFieldListFilter 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37735191/

相关文章:

python - 来自 Django-Pandas 查询集的 Pandas 数据透视表

Python递归函数超出了递归限制。如何将其转换为迭代

python - 覆盖 Odoo 中的创建函数

python - Scrapy:ImportError:没有名为项目的模块

python - 更改django中的文件名

Django 和 celery : admin task list does not display values

python - 水平多位过滤器不起作用 django admin

python - Keras神经网络: ValueError - input shape is wrong

django - 测试用户是否未登录,重定向到登录页面

python - 在 Django 中使用 inspectdb 时出错