查询反向ForeignKey查找返回多个对象

时间:2016-03-06 19:17:57

标签: django search

好的,我们说我有两个型号。人与岗位。

人有两个字段,名称和年龄。邮政也有两个,人和内容。

class Person(models.Model):
    name = models.CharField(...)
    age = models.IntegerField(...)

class Post(models.Model):
    person = models.ForeignKey(Person, unique=false, related_name = 'posts')
    content = models.TextField(...)

好吧,我们有两个人。 Lisa Foobar(23岁)和John Baz(32岁)。 Lisa有5个帖子。约翰只有2人。

因此,在我们的观点中,为了让人们按姓名或年龄获取,我们需要进行查询:

from django.db.models import Q

...

search = *insert your search query here*
people = Person.objects.all().filter(Q(name__icontains=search) | Q(age__icontains=search))

所以现在当我们搜索" John"然后约翰弹出,当我们搜索“23'丽莎弹出,整洁!

但是如果我们想通过帖子进行搜索,然后显示所有拥有搜索内容的帖子的人呢?

people = Person.objects.all().filter(Q(name__icontains=search) | Q(age__icontains=search | Q(posts__content__icontains=search))

这很好用,但有一个问题。如果此人有多个帖子包含您要搜索的内容,则会多次出现。

因此,如果Lisa有3个包含字母A的帖子,那么如果您正在搜索字母A,她将在查询中出现3次。另外由于某种原因,如果我们只是搜索Lisa,她会立即出现5次!

我们怎样才能避免这种情况?

1 个答案:

答案 0 :(得分:1)

您可以添加.distinct(),以便查询集只返回不同的结果。