【问题标题】:How to add a default filter inside Django FilterSet?如何在 Django FilterSet 中添加默认过滤器?
【发布时间】:2021-05-19 00:10:35
【问题描述】:

问题:

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

我尝试过的事情:

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

【问题讨论】:

  • 也分享你的代码

标签: python django filter overriding django-filter


【解决方案1】:

您可以尝试覆盖自定义 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

【讨论】:

    【解决方案2】:

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

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

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

    class MyFilterView(FilterView):
        filterset_class = MyFilterSetClass
        queryset = MyModel.objects.filter(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2015-07-09
      • 2010-10-25
      • 2015-06-10
      • 1970-01-01
      • 2013-02-02
      • 2021-03-19
      相关资源
      最近更新 更多