简体   繁体   English

Django 过滤器、q 对象和同时在许多文本字段中搜索“包含”

[英]Django-filters, q objects & searching "contains" in manytomany & textfields at the same time

does anyone know anything about q objects and searching many to many fields?有没有人知道 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()

I am using django-filters to create a filter / search area, below if filters.py:我正在使用 django-filters 创建一个过滤器/搜索区域,如果在 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)

        )

When I render the form field "multi_name_fields" I get an error " Related Field got invalid lookup: contains "当我呈现表单字段“multi_name_fields”时,出现错误“相关字段查找无效:​​包含”

The search form functions perfectly without the manytomany field added in but when I add in the "tags" manytomany field it gives me the above error.搜索表单在没有添加 manytomany 字段的情况下完美运行,但是当我添加“标签” manytomany 字段时,它给了我上述错误。

Does anybody have any ideas where I am going wrong or what I am missing?有没有人知道我哪里出错了或我错过了什么?

If you want to query value of many-to-many-field-values, you should clarify the field you want to fetch, as below.如果你想查询多对多字段值的值,你应该明确你想要获取的字段,如下所示。

from

Q(tags__contains=value)

to

Q(tags__name__contains=value)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM