Django-filter,q对象和搜索"contains"同时在manytomany和文本字段中



有人知道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"我得到一个错误"相关字段查找无效:包含">

没有添加manymany字段的搜索表单功能完美,但是当我添加"标签"许多许多字段,它给了我上面的错误。

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

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

Q(tags__contains=value)

Q(tags__name__contains=value)

最新更新