Django 中带自定义过滤器的 list_filter 排除

0 投票
1 回答
1076 浏览
提问于 2025-04-16 13:02

我想在Django的管理界面侧边栏里添加两个过滤器,第一个过滤器是这样的:https://gist.github.com/739760c7de861f76657f。在这个过滤器里,我想要过滤掉金色的那些以“J”开头的项,而银色的过滤器已经可以用了,它会排除所有不以“J”开头的项。

第二个过滤器稍微复杂一点,我的数据库里有一个字段记录了几个人的体重,我希望能够按体重范围来过滤,比如说体重在50到70之间等等。

我该怎么做呢?非常感谢你们的帮助!

1 个回答

0

搞定了...

class GoldorSilverFilter(DateFieldFilterSpec):
    def __init__(self, f, request, params, model, model_admin):
        super(GoldorSilverFilter, self).__init__(f, request, params, model, model_admin)

        self.links = (
            (_('All'), {}),
            (_('Gold'), {'%s__regex' % self.field.name: '^[^J]',}),
            (_('Silver'), {'%s__istartswith' % self.field.name: 'J',}),
        )

    def title(self):
        return _("Metal")
        #return self.field.name

FilterSpec.filter_specs.insert(0, (lambda f: getattr(f, 'goldorsilverfilter', False), GoldorSilverFilter))

我知道返回值不应该只和一个值挂钩,但我不知道该怎么处理... 关于第二点,我用了同一个类,但用了 %s_gte 和 %s_lte

希望这能对某些人有所帮助...

撰写回答