我有一个奇怪的问题。
我有3个物体。都一样
class Articles(models.Model):
owner = models.ForeignKey(Author)
tags = models.ManyToManyField('Tag')
class Tag(models.Model):
name = models.CharField(max_length=255)
所以我有3篇文章。使用所有相同的标签:'tag1'和'tag2'
我有疑问
actionsAll = Articles.objects.filter((Q(tags__name__exact="tag1") | Q(tags__name__exact="tag2"))).distinct()
这给了我所有的文章。它会返回6篇不同于(/)的文章,因为它会收集每篇文章2x,因为它们都有两个标签。
但是使用此查询:
actionsAll = Articles.objects.filter((Q(tags__name__exact="tag1") & Q(tags__name__exact="tag2"))).distinct()
这给了我没有文章。 由于文章包含两个标签,它应该返回它们不应该吗?
答案 0 :(得分:1)
如果查看它生成的SQL,您会看到它检查相同的标记是否同时具有这两个名称。您需要的是遍历关系的IN
query或EXISTS
查询。
答案 1 :(得分:0)
** import Q from django
from *models import SuperUser, NameUser
import operator
# we do not know the name in the superhero
super_users = SuperUser.objects.all()
q_expressions = [Q(username=user.username) for user in super_users]
# we have bind super_hero with user
name_superheroes_qs = models.NameUser.objects.filter(reduce(operator.or_, q_expressions))