Django Admin:如何过滤特定值范围的整数字段

时间:2010-10-30 19:51:12

标签: django django-admin django-admin-filters

如何在Django Admin中创建一个过滤器,只显示整数值介于两个值之间的记录?例如,如果我有一个具有年龄属性的模型Person,并且我只想显示年龄在45到65之间的Person记录。

4 个答案:

答案 0 :(得分:1)

你看到的是http://djangosnippets.org/snippets/587/ - 该片段有点旧,但在经过额外的微小改动后效果很好。

我在https://gist.github.com/1009903

上传了修补后的版本

答案 1 :(得分:1)

您可以使用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()创建词典并根据年龄返回

    def lookups(self, request, model_admin):
    return [
        (1, '5-21'),
        (2, '22-35'),
        (3, '35-60')
    ]

答案 2 :(得分:0)

我只想要一个列表视图的过滤版本,您可以通过链接访问(例如在列表视图中),例如,只查看模型的相关项目,您可以执行以下操作:

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'

这将带您进入“Reciepts”的列表视图,但只会链接到所选发票的列表视图。

如果您希望在侧边栏中显示过滤器,则可以try this snippetthis

答案 3 :(得分:0)

根据another answer for a related question,我了解到有officially documented way since version 1.4。它甚至包括按日期过滤的示例。

尽管如此,sorin answer中的代码段也很有趣,因为它只是将django样式的参数添加到URL,这是一个与官方文档示例不同的解决方案。