Q对象和django中的'&'运算符

Dan*_*Man 11 django django-q

我有一个奇怪的问题.

我有3个物体.全都一样

class Articles(models.Model):
    owner = models.ForeignKey(Author)
    tags = models.ManyToManyField('Tag')


class Tag(models.Model):
     name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

所以我有3篇文章.使用所有相同的标签:'tag1'和'tag2'

我有疑问

actionsAll = Articles.objects.filter((Q(tags__name__exact="tag1") | Q(tags__name__exact="tag2"))).distinct()
Run Code Online (Sandbox Code Playgroud)

这给了我所有的文章.它会返回6篇不同的文章(因为它们会收集每篇文章2x,因为它们都有两个标签).

但是使用此查询:

actionsAll = Articles.objects.filter((Q(tags__name__exact="tag1") & Q(tags__name__exact="tag2"))).distinct()
Run Code Online (Sandbox Code Playgroud)

这给了我没有文章.由于文章包含两个标签,它应该返回它们所有的不应该吗?

Ign*_*ams 1

如果您查看它生成的 SQL,您会发现它会检查同一标记是否具有两个名称。你需要的是一个IN查询或者一个EXISTS遍历关系的查询。