摘要:
正如jpic和sgallen在评论中所建议的那样,一个选项是.filter()为每个类别添加。每个附加项都会filter添加更多联接,这对于一小组类别来说应该不是问题。
有聚合 方法。对于大量类别,此查询将更短并且可能更快。
您还可以选择使用自定义查询。
一些例子
测试设置:class Photo(models.Model):
tags = models.ManyToManyField('Tag')class Tag(models.Model):
name = models.CharField(max_length=50)
def __unicode__(self):
return self.nameIn [2]: t1 = Tag.objects.create(name='holiday')In [3]: t2 = Tag.objects.create(name='summer')In [4]: p = Photo.objects.create()In [5]: p.tags.add(t1)In [6]: p.tags.add(t2)In [7]: p.tags.all()Out[7]: [, ]
使用链式过滤器方法:In [8]: Photo.objects.filter(tags=t1).filter(tags=t2)Out[8]: []
结果查询:In [17]: print Photo.objects.filter(tags=t1).filter(tags=t2).query
SELECT "test_photo"."id"FROM "test_photo"INNER JOIN &#