Django:为单个ManyToManyField过滤具有多个参数的模型

时间:2014-03-18 08:49:31

标签: django many-to-many

我有以下模特。

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。我正在寻找一种有效的解决方案。

1 个答案:

答案 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