【问题标题】:Django Admin: How do I filter on an integer field for a specific range of valuesDjango Admin:如何过滤特定范围值的整数字段
【发布时间】:2011-05-02 21:40:27
【问题描述】:

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

【问题讨论】:

  • @Svisstack 我不这么认为;这是一道编程题。
  • 是的,我知道,但对网站管理员来说更好
  • 我完全不同意,@svisstack。这是一个纯粹的编程问题;它与服务器配置、SEO、SMO 或设计敏感性无关。

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


【解决方案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 snippetthis

【讨论】:

    【解决方案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')
            ]
        

        【讨论】:

          猜你喜欢
          • 2022-08-14
          • 2017-01-31
          • 2017-08-05
          • 1970-01-01
          • 2010-12-12
          • 1970-01-01
          • 2015-01-07
          • 2015-10-10
          • 1970-01-01
          相关资源
          最近更新 更多