我有一个模型,它有一个标签列表。
class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d', max_length=150)
tags = models.ManyToManyField(Tag)我希望能够找到所有标记为X和Y的文档,但不只是X和Y。也就是说,当我搜索X和Y时,我希望显示标记为X、Y、Z的文档。
来自this问题的被接受的答案让我走得很远,但它返回的是带有这些标签的项目,并且只返回那些标签。注释限制了查询集。
发布于 2015-09-17 09:40:19
我想通了。在SO here上有一个很棒的资源。在我的特殊情况下,我想要链式过滤器。这就是我如何使用任意数量的标签来实现的。
docs = Document.objects
for tag in tags:
docs = docs.filter(tags=tag)这给了我需要的AND查询。
发布于 2015-09-17 05:11:40
您只是想要一个INNER JOIN --这是您跨关系进行过滤时的默认设置。
这应该是您想要的结果:
Document.objects.filter(tags=X, tags=Y)这将使您获得同时具有标记X和标记Y的每个Document,而不考虑任何其他标记。
https://stackoverflow.com/questions/32618171
复制相似问题