python - django 将额外的参数传递给filterset_class

标签 python django

我正在使用django-filter 。我有过滤器类:

class ProductFilter(django_filters.FilterSet):
    def __init__(self, attribute=None, *args, **kwargs):
        super(ProductFilter, self).__init__(*args, **kwargs)
        #do stuff with attribute

以及我的观点:

from django_filters.views import FilterView
class ProductListView(FilterView):
        model = Product
        ....
        filterset_class = ProductFilter

如何将参数传递给 ProductFilter __init__ 函数? filterset_class = ProductFilter(attribute='width') 不起作用。

最佳答案

您可以尝试覆盖 get_filterset_kwargs方法:

class ProductListView(FilterView):
    model = Product
    ...
    filterset_class = ProductFilter

    def get_filterset_kwargs(self, filterset_class)
        kwargs = super(ProductListView, self).get_filterset_kwargs(filterset_class)
        kwargs['attribute'] = 'width'
        return kwargs

在您的 FilterSet 类中,您可以从 kwargs 中弹出属性:

class ProductFilter(django_filters.FilterSet):
    def __init__(self, **kwargs):
        attribute = kwargs.pop['attribute']
        super(ProductFilter, self).__init__(**kwargs)

或者明确地将其包含在签名中。

class ProductFilter(django_filters.FilterSet):
    def __init__(self, attribute=None, **kwargs):
        super(ProductFilter, self).__init__(**kwargs)

关于python - django 将额外的参数传递给filterset_class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37135320/

相关文章:

python - 使用 Cartopy 绘制极地网格海冰浓度

Django 静态文件

python - 如何使用 gunicorn 在 django 中编写 log.info() 以进行控制台?

python - django 验证器和 clean_field 方法之间的区别

python - 如何有效地按元素评估整个 Python 函数列表?

python - python 中的网络爬虫。我应该从哪里开始,我应该遵循什么? - 需要帮助

python - 为什么循环完成后循环内 print() 会输出?

python - 如何使用 urllib2 在 python 中下载 zip 文件?

django 模板抛出 NoReverseMatch 错误

python - 如何限制员工用户在 Django 管理页面中只能看到他们的信息?