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

标签 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)

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

我有疑问
actionsAll = Articles.objects.filter((Q(tags__name__exact="tag1") | Q(tags__name__exact="tag2"))).distinct()

这给了我所有的文章。它将返回 6 篇没有 distinct() 的文章,因为它会收集每篇文章 2 倍,因为它们都有两个标签。

但是有了这个查询:
actionsAll = Articles.objects.filter((Q(tags__name__exact="tag1") & Q(tags__name__exact="tag2"))).distinct()

这给我没有文章。
由于文章包含两个标签,它应该全部返回它们,不是吗?

最佳答案

如果您查看它生成的 SQL,您将看到它会检查同一标签是否具有两个名称。您需要的是一个 IN queryEXISTS遍历关系的查询。

关于django - django 中的 Q 对象和 '&' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4523530/

相关文章:

django - 如何构造不匹配的django Q对象

python - 关于Q对象和外键的谜题

python - 'Q' 对象没有属性 'split' - Django

python - Django 迁移被杀死

python - 如何使用 AJAX 使用相同的 html 模板(使用 Python 和 Django)创建和编辑新帖子?

python - django更新 View 并传递上下文

Django QuerySet Limit 多次访问数据库?

python - 允许用户使用 django 表单创建 "appointment"

django - 更改 Q 对象顺序的查询结果不同

python - Django 多对多过滤器(关系=无或排除,如果有关系= x)