gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:08:16 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com