我是 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/