我有以下模特。
class Contents (models.Model):
...
tags = models.ManyToManyField('Tag')
class Tag (models.Model):
...
name = models.CharField(max_length=20)
考虑一下,我正在尝试获取标有tag1 and tag2
的内容。
Django有没有办法做Contents.objects.filter(tags__name = ['tag1','tag2'])
此处tag1,tag2,...
是动态生成的。
更新
我一直在使用for loop
。我正在寻找一种有效的解决方案。
答案 0 :(得分:0)
如果您要查找列表,那么您应该可以使用查找__in
:
Contents.objects.filter(tags__name__in = ['tag1','tag2'])
请参阅docs。
对于同时包含两个标记的查询集,您可能需要链接过滤器调用:
tags = ['tag1','tag2']
contents = Contents.objects.all()
for tag in tags:
contents = contents.filter(tags__name = tag)
这应该过滤查询集,以便您只有两个标记匹配的查询集。从此问题复制的方法:Django queryset to match all related objects