Skip to main content
 首页 » 编程设计

python之在 Django-Filter 中限制一个字段的查询集

2024年11月01日30lonelyxmas

我有一个 django-filter FilterSet,它采用用户保存的链接的查询集。 Tags 是一个 ManyToManyField,我想将该选择范围缩小到由同一用户创建(拥有)的标签。完全不知所措 - 文档没有那么广泛。

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

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

请您参考如下方法:

我之前没有使用过 django-filter,但是查看文档,您应该能够执行如下操作。您需要在 LinkFilter 的构造函数中为关键字参数 user 传递要过滤的用户。否则它将继续显示所有用户的所有标签。我还猜测 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)