python - 为自定义“即将到来”过滤器扩展 Django-admin 的 DateFieldListFilter
问题描述
我正在尝试向 Django Admin DateFieldListFilter 添加一个自定义的“即将到来的”过滤器。这很简单,只需选择今天之后的日期。在这个线程的基础上,我能够将 Django 的标准 DateFieldListFilter 扩展为我自己的自定义项,如下所示:
class MyDateTimeFilter(DateFieldListFilter):
def __init__(self, *args, **kwargs):
super(MyDateTimeFilter, self).__init__(*args, **kwargs)
today = datetime.now()
self.links += (('Upcoming'), {self.lookup_kwarg_since: today.strftime('%d %B %Y')}),
它在我的过滤器底部正确显示“即将到来”,但单击实际上并没有过滤结果。我不知道我的语法有什么问题,我尝试了很多替代方法......
非常感激您的帮忙!
PS:我正在使用 Python 3.5.2 和 Django 2.0.6
解决方案
没有直接跳到这个,我已经完成了你之前项目所需要的:
在filters.py
:
import datetime
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 += ((
(_('Upcoming'), {
self.lookup_kwarg_since: str(today),
self.lookup_kwarg_until: str(today + datetime.timedelta(days=7)),
}),
))
您想添加一些稍后使用的声明(例如,today = now.date()
),然后您想使用self.lookup_kwarg_until
关键字参数,并在日期之前有一些时间范围作为您的查找(为方便起见,我使用了today + datetime.timedelta(days=7)
,但您可以很容易地配置它到您需要的任何时间跨度。
然后你需要这样的东西admin.py
:
from django.contrib import admin
from filters import MyDateTimeFilter
class PostAdmin(admin.ModelAdmin):
list_filter = (
('published_at', MyDateTimeFilter()),
)
免责声明:这适用于 Python 3.7、Django 2.0*。手指交叉这对你有用!
推荐阅读
- typescript - 交叉点类型不能正常工作?
- javascript - 在旧网站上 Gulp 到 Webpack 迁移 - 从非 npm 依赖项生成供应商
- xpath - 选择属性值时 XPath 和 XQuery 的区别
- c++ - 当行和列由用户设置时,2D x 2D,随机
- mysql - 最新的记录正在进入 mysql 的第一行
- javascript - Javascript函数中的动态参数
- python - 如何在 Grakn 中使用 Python 客户端计算连接组件
- php - 来自两个实体的关系,建议
- angular - 在 Angular 中编辑和保存表单输入
- python - Pd:将一列列表转换为字符串列