在 Django 管理中按自定义日期范围过滤
Django 管理站点可以按自定义日期范围选择条目,即使用两个 DateFields
和 AdminDateWidget
吗?我知道有 date_hierarchy
和 list_filter
属性,但是当有大量数据库条目并且您只需要按精确的 < 过滤项目时,它们似乎不太有用。 code>date__gte 和 date__lte
查询。
Can Django admin site select entries by a custom date range, i.e. using two DateFields
with AdminDateWidget
? I know that there are date_hierarchy
and list_filter
properties, but they don't seem very useful when there are a lot of DB entries and you just need to filter items by exact date__gte
and date__lte
query.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
在 django 1.4 中,您可以使用 list_filter 。尝试:
这将给出一些内置范围,但如果您将日期范围放入 url 中,它将起作用,例如:
如果您需要日期选择器(如 jquery),那么您需要扩展 DateFieldListFilter。我向 django-admin-filtrate 发送了一个补丁,所以,请尽快检查一下。
In django 1.4, you can user list_filter. try:
This will give some built-in ranges, but it will work if you put the date range in url, like:
If you need a date picker (like jquery), then you need to extend DateFieldListFilter. I sent a patch to django-admin-filtrate, so, check there soon.
您可以使用这个最新的: https://github.com/silentsokolov/django- admin-rangefilter。
You can use this up-to-date one: https://github.com/silentsokolov/django-admin-rangefilter.
注意:我在 2009 年写了这个答案,当时 Django 中还没有作为公共 API 提供所需的功能。对于 Django 1.4+,请参阅其他答案。
据我所知,尚未提供此功能,但您可以自己构建它。
首先,您可以使用
date__gte
和date__lte
作为 url 中的 GET 参数来过滤项目。例如,
将显示日期为 2009 年 5 月、6 月或 7 月的所有条形对象。
然后,如果您覆盖 admin/change_list.html 模板文件,您可以添加开始和结束日期的小部件,导航到所需的网址。
向 Daniel 致敬回答另一个SO问题,它教我如何使用查询集过滤器参数作为GET参数。
Note: I wrote this answer in 2009, when the required functionality was not available in Django as a public API. For Django 1.4+, see the other answers.
This functionality isn't provided as far as I'm aware, but you can build it yourself.
Firstly, you can filter items using
date__gte
anddate__lte
as GET arguments in the url.For example
will display all bar objects with dates in May, June or July 2009.
Then if you override the admin/change_list.html template file, you can add widgets for start and end dates, which navigate to the required url.
Hat tip to Daniel's answer to another SO question, which taught me about using queryset filter parameters as GET arguments.
现在可以使用标准 Django API 轻松实现自定义管理过滤器。在文档日,您现在可以在
list_filter
中添加:并且它们继续到 演示(滚动到第二个项目符号)。我自己使用它来添加过滤器,其与对象的底层关系不是通过模型属性,而是通过它们的方法的结果,这是传统过滤器不提供的。
It's now possible to easily implement Custom Admin filters using standard Django APIs. The docs day that in the
list_filter
, you can now add:And they go ahead to demo (scroll to the second bullet). I've used this myself to add filters whose underlying relation to the objects isn't via model attributes, but results of methods on them, something which the traditional filters don't offer.
我最终实现了这样的内容,
admin.py
:change_list.html
:被过滤的日期列是
trade_date
。I ended up implementing it something like this,
admin.py
:change_list.html
:The date column being filtered is
trade_date
.DateRangeFilter()
类位于 https://github.com/runekaagaard/django-admin-滤液就是这样做的:)The
DateRangeFilter()
class found at https://github.com/runekaagaard/django-admin-filtrate does just that :)