首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django-filter:使用ChoiceFilter,并根据请求选择

django-filter:使用ChoiceFilter,并根据请求选择
EN

Stack Overflow用户
提问于 2018-12-20 09:52:40
回答 1查看 2.5K关注 0票数 4

我正在使用django-filter,并且需要添加一个ChoiceFilter,它的选择取决于我收到的请求。我正在为ChoiceFilter阅读文档,但它说:This filter matches values in its choices argument. The choices must be explicitly passed when the filter is declared on the FilterSet

那么,在ChoiceFilter中有什么方法可以获得与请求相关的选项吗?

我还没有写代码,但下面是我想要的-

代码语言:javascript
运行
复制
class F(FilterSet):
    status = ChoiceFilter(choices=?) #choices depend on request
    class Meta:
        model = User
        fields = ['status']
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-28 02:45:54

我一直在努力寻找,以致于我找到了两种不同的方法。(都是通过重写__init__方法)。受问题启发的代码。

代码语言:javascript
运行
复制
class LayoutFilterView(filters.FilterSet):
    supplier = filters.ChoiceFilter(
        label=_('Supplier'), empty_label=_("All Suppliers"),)

    def __init__(self, *args, **kwargs):
        super(LayoutFilterView, self).__init__(*args, **kwargs)

        # First Method
        self.filters['supplier'].extra['choices'] = [
            (supplier.id, supplier.id) for supplier in ourSuppliers(request=self.request)
        ]

        # Second Method
        self.filters['supplier'].extra.update({
            'choices': [(supplier.id, supplier.name) for supplier in ourSuppliers(request=self.request)]
        })

函数ourSuppliers只是返回一个用作选择的QuerySet

代码语言:javascript
运行
复制
def ourSuppliers(request=None):
    if request is None:
        return Supplier.objects.none()

    company = request.user.profile.company
    return Supplier.objects.filter(company=company)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53866157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档