在Djangoffi中限制字段的查询集

2024-09-27 20:17:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个django过滤器FilterSet,它接受用户保存链接的查询集。标记是一个ManyToManyField,我希望将选择范围缩小到由同一用户创建(拥有)的标记。完全不知所措-文件没有那么广泛。在

class LinkFilter(django_filters.FilterSet):

    class Meta:
        model = Link
        fields = ['title', 'domain', 'tags', 'date', 'modified']

https://github.com/alex/django-filter/


Tags: 文件django用户标记过滤器fieldsmodel链接
3条回答
class ProductFilter(FilterSet):
    def __init__(self,data=None, queryset=None, prefix=None, strict=None, **kwargs):
        self.kwargs = kwargs
        super(ProductFilter, self).__init__(data, queryset, prefix, strict)

    @property
    def form(self):
        form = super(ProductFilter, self).form

        for key, queryset in self.kwargs.iteritems():
            form.fields[key].queryset = queryset

        return form

    class Meta:
        model = Product
        fields = ['name', 'tags']

class ViewFilter(TemplateView):
    template_name = 'frontend/view_filter.html'
    def get_context_data(self, **kwargs):
        context = super(ViewFilter, self).get_context_data(**kwargs)

        context['filter'] = ProductFilter(self.request.GET,
                                          queryset=Product.objects.filter(tags__user_id=2),
                                          tags=Tag.objects.filter(user_id=2))

        return context

以下是我在一个非常相似的情况下所做的(试图适应你的情况):

class LinkFilter(django_filters.FilterSet):

    def __init__(self, *args, **kwargs):
        current_user = kwargs['current_user']
        del kwargs['current_user']
        super(LinkFilter, self).__init__(*args, **kwargs)
        self.filters['customer'].extra.update(
            {'queryset': models.Tags.objects.get_my_tags(current_user)})

    class Meta:
        model = Link
        fields = ['title', 'domain', 'tags', 'date', 'modified']

在您看来:

^{pr2}$

在我的managers.py文件中定义了get_my_tags和{}。在

我以前没有使用过django过滤器,但是看看这些文档,您应该能够做如下的事情。您需要在关键字参数user的LinkFilter构造函数中传递要过滤的用户。否则,它将继续显示所有用户的所有标记。我还猜测Link类上的User ForeignKey属性名为created_by。在

class LinkFilter(django_filters.FilterSet):
    class Meta:
        model = Link
        fields = ['title', 'domain', 'tags', 'date', 'modified']

    def __init__(self, data=None, queryset=None, prefix=None, strict=None, user=None):
        super(LinkFilter, self).__init__(data=data, queryset=queryset, prefix=prefix, strict=strict))
        if user:
            self.filters['tags'].filter(created_by=user)

相关问题 更多 >

    热门问题