问题描述
我有一个名为PostType
的抽象模型类,其中包含一些派生自其的子模型。
该模型如下所示:
class PostType(models.Model):
title = models.CharField(
max_length=255,unique=True,verbose_name='Title'
)
description = models.CharField(
max_length=255,default='',verbose_name='Description'
)
tags = models.ManyToManyField(
to=Tag,blank=True,verbose_name='Tags'
)
content = RichTextUploadingField(
default='',verbose_name='Post Content'
)
class Meta:
abstract = True
它具有一个相关的Tag模型,如下所示:
class Tag(models.Model):
name = models.CharField(
max_length=255,verbose_name='Name',unique=True
)
description = models.TextField(
verbose_name='Description',default=''
)
在我的一种观点中,我试图使用SearchVector
并搜索多个字段来查询所有子类:
query = request.GET.get('s')
from django.contrib.postgres.search import SearchVector
get_qs_list = [model.objects.annotate(
search=SearchVector('title','description','content','tags__name')
).filter(search=query) for model in models.PostType.__subclasses__()]
现在,搜索将返回它应有的所有结果。但是,由于某些原因,它会返回 some 项的重复结果。
如果我从'tags__name'
中删除SearchVector
,问题似乎就消失了,但是我不明白为什么。
我在做什么错了,如果我不搜索相关字段,为什么还能正常工作?
编辑:
我刚刚意识到与该项目相关的每个Tag
都会得到重复的结果。因此,如果该项目具有三个标签,我将在搜索结果中获得该项目的三个副本。我仍然不明白为什么会发生这种情况,我非常感谢您提供任何建议!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)