Django-filters, q objects & 同时在 manytomany & textfields 中搜索“包含”
Posted
技术标签:
【中文标题】Django-filters, q objects & 同时在 manytomany & textfields 中搜索“包含”【英文标题】:Django-filters, q objects & searching "contains" in manytomany & textfields at the same time 【发布时间】: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 字段时,它给了我上述错误。
有没有人知道我哪里出错了或者我错过了什么?
【问题讨论】:
【参考方案1】:如果要查询多对多字段值的值,则应明确要获取的字段,如下所示。
来自
Q(tags__contains=value)
到
Q(tags__name__contains=value)
【讨论】:
谢谢大家!以上是关于Django-filters, q objects & 同时在 manytomany & textfields 中搜索“包含”的主要内容,如果未能解决你的问题,请参考以下文章
将 django-select2 与 django-filters 连接
如何使用`django-filters`编写将在整数字段上使用范围过滤器的GraphQL查询?