Python 选择相关字段后重复的值

Python 选择相关字段后重复的值,python,django,full-text-search,Python,Django,Full Text Search,我有一个简单的论坛应用程序: #模型 课程主题(models.Model): title=models.CharField(最大长度=255) 类消息(models.Model): text=models.TextField() topic=models.ForeignKey(主题,相关的\u name='messages') #观点 类SearchView(ListView): ... def get_queryset(自我): search\u vector=SearchVector('m

我有一个简单的论坛应用程序:


#模型
课程主题(models.Model):
title=models.CharField(最大长度=255)
类消息(models.Model):
text=models.TextField()
topic=models.ForeignKey(主题,相关的\u name='messages')
#观点
类SearchView(ListView):
...
def get_queryset(自我):
search\u vector=SearchVector('messages\u text')
search\u query=SearchQuery(self.request.GET.GET('query'))
topics=Topic.objects.annotate(
排名=搜索排名(搜索向量、搜索查询)
).filter(秩=0.0)。排序依据('-rank')
返回主题
我想在我的论坛全文搜索。 一切正常,但在主题查询结果中,我得到了重复的对象

<QuerySet [<Topic: 1>, <Topic 1>, <Topic 2>, <Topic 1>, ...]>

我认为这是因为一个主题中的多条消息给了我不同的排名值


如何删除重复的主题但保持排名顺序?

您只需在查询集的末尾添加
.distinct()

您应该回顾一下,其中有一些关于将
distinct()
order\u by()
结合使用的具体说明。在这里,它不应该影响您,因为您不是按相关的模型字段排序,而是要注意的东西

class SearchView(ListView):
    ...

    def get_queryset(self):
        search_vector = SearchVector('messages__text')
        search_query = SearchQuery(self.request.GET.get('query'))
        topics = Topic.objects.annotate(
            rank=SearchRank(search_vector, search_query)
        ).filter(rank__gte=0.0).order_by('-rank')

        return topics.distinct()