Django Admin:如何过滤特定范围值的整数字段
Posted
技术标签:
【中文标题】Django Admin:如何过滤特定范围值的整数字段【英文标题】:Django Admin: How do I filter on an integer field for a specific range of values 【发布时间】:2011-05-02 21:40:27 【问题描述】:如何在 Django Admin 中创建过滤器以仅显示整数值介于两个值之间的记录?例如,如果我有一个模型 Person,它有一个 age 属性,我只想显示年龄在 45 到 65 之间的 Person 记录。
【问题讨论】:
更适合webmasters.stackexchange.com/questions @Svisstack 我不这么认为;这是一道编程题。 是的,我知道,但对网站管理员来说更好 我完全不同意,@svisstack。这是一个纯粹的编程问题;它与服务器配置、SEO、SMO 或设计敏感性无关。 【参考方案1】:我只是想要一个列表视图的过滤版本,您可以通过链接访问(例如在列表视图中),例如仅查看模型的相关项目,您可以执行以下操作:
def admin_view_receipts(self, object):
url = urlresolvers.reverse('admin:invoice_%s_changelist'%'receipt')
params = urllib.urlencode('invoice__id__exact': object.id)
return '<a href="%s?%s">Receipts</a>' % (url, params)
admin_view_receipts.allow_tags = True
admin_view_receipts.short_description = 'Receipts'
这会将您带到“收据”的列表视图,但只有那些链接到所选发票的列表视图。
如果您想要在侧边栏中显示的过滤器,您可以try this snippet 或this
【讨论】:
【参考方案2】:您正在寻找的是http://djangosnippets.org/snippets/587/ - sn-p 有点旧,但经过额外的小改动后就可以正常工作了。
我在https://gist.github.com/1009903上传了补丁版本
【讨论】:
【参考方案3】:基于another answer for a related question,我了解到有一个officially documented way 可以做到这一点since version 1.4。它甚至包括一个按日期过滤的示例。
不过,sorin answer 中的 sn-p 也很有趣,因为它只是在 URL 中添加了 django 样式的参数,这是与官方文档示例不同的解决方案。
【讨论】:
【参考方案4】:您可以使用queryset()
函数过滤类似这样的字段...我使用过SimpleListFilter
def queryset(self, request, queryset):
filt_age = request.GET.get('parameter_name')
return queryset.filter(
age__range=self.age_dict[filt_age]
)
并在lookups()
中创建dict并根据年龄返回
def lookups(self, request, model_admin):
return [
(1, '5-21'),
(2, '22-35'),
(3, '35-60')
]
【讨论】:
以上是关于Django Admin:如何过滤特定范围值的整数字段的主要内容,如果未能解决你的问题,请参考以下文章
如何使用`django-filters`编写将在整数字段上使用范围过滤器的GraphQL查询?