如何在 Django FilterSet 中添加默认过滤器?

时间:2021-05-18 14:41:54

标签: python django filter overriding django-filter

问题:

我正在尝试添加一个初始过滤器,它为其他过滤器提供基本查询集以进一步过滤。

我尝试过的事情:

  • 我尝试覆盖 qs 属性方法,但覆盖 qs 会使其他过滤器无法正常工作。
  • 我还尝试覆盖 __init__ 方法,但未在我的自定义过滤器类中调用它。

2 个答案:

答案 0 :(得分:0)

您可以尝试覆盖自定义 FilterSet 类的 init 方法:

def __init__(self, *args, **kwargs):
    super(YourCustomFilter, self).__init__(*args, **kwargs)
    self.form.initial['your_field'] = "default_value"

不要忘记在您的 View 类中提及这一点:

filter_backends = [DjangoFilterBackend]
filterset_class = YourCustomFilter

答案 1 :(得分:0)

FilterSet 将查询集作为参数,因此您可以过滤自己的查询集,然后将其传入:

queryset = MyModel.objects.filter(...)
my_filters = MyFilterSetClass(queryset=queryset)

如果您使用的是 FilterView,则只需设置视图查询集(或使用 get_queryset()):

class MyFilterView(FilterView):
    filterset_class = MyFilterSetClass
    queryset = MyModel.objects.filter(...)
相关问题