好的,我们说我有两个型号。人与岗位。
人有两个字段,名称和年龄。邮政也有两个,人和内容。
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次!
我们怎样才能避免这种情况?
答案 0 :(得分:1)
您可以添加.distinct()
,以便查询集只返回不同的结果。