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 admin 中按自定义日期范围过滤

如何使用`django-filters`编写将在整数字段上使用范围过滤器的GraphQL查询?

通过具有最大列值的记录过滤 Django 查询

在 Django admin 中,如何按组过滤用户?

Django Admin Cookbook-38如何获取特定对象的Django Admin后台URL

Django Admin Cookbook-17如何仅限特定用户登录Django Admin管理后台