【问题标题】:Django-filters, q objects & searching "contains" in manytomany & textfields at the same timeDjango-filters, q objects & 同时在 manytomany & textfields 中搜索“包含”
【发布时间】:2021-12-08 22:57:41
【问题描述】:

有人知道关于 q 对象和搜索多对多字段的任何事情吗?

class tags(models.Model):

    name = models.CharField(max_length=20)
    
    def __str__(self):
        return self.name

class Item(models.Model):

    item_id = models.CharField(default = random_string,max_length=5)
    tags = models.ManyToManyField(tags, verbose_name="tags")
    description = models.TextField()
    topic = models.TextField()

我正在使用 django-filters 创建一个过滤器/搜索区域,如下 if filters.py:

class ItemFilter(django_filters.FilterSet):


    multi_name_fields = django_filters.CharFilter(method='filter_by_all_name_fields')



    class Meta:
        model = Item
        fields = ['description','topic','tags']
    
    def filter_by_all_name_fields(self, queryset, name, value):
        
        return queryset.filter(
            Q(description__contains=value) | Q(topic__contains=value)  |  Q(tags__contains=value)

        )

当我呈现表单字段“multi_name_fields”时,我收到一个错误“相关字段查找无效:​​包含”

在没有添加 manytomany 字段的情况下,搜索表单功能完美,但是当我添加“tags”manytomany 字段时,它给了我上述错误。

有没有人知道我哪里出错了或者我错过了什么?

【问题讨论】:

    标签: django django-queryset q django-filter searchqueryset


    【解决方案1】:

    如果要查询多对多字段值的值,则应明确要获取的字段,如下所示。

    来自

    Q(tags__contains=value)
    

    Q(tags__name__contains=value)
    

    【讨论】:

    • 谢谢大家!
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2013-04-08
    • 2021-08-11
    • 2016-02-08
    • 2013-05-23
    • 2023-02-13
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多