跨django ManyToManyField的数据库查询

时间:2009-11-30 12:42:46

标签: python django django-database

我想找到如何选择ManyToMany字段包含另一个对象的所有对象。我有以下模型(剥离)

class Category(models.Model):
    pass

class Picture(models.Model):
    categories = models.ManyToManyField(Category)
    visible = models.BooleanField()

我需要一个功能来选择一个或多个类别中的所有图片:

def pics_in_cats(cat_ids=()):
    pass

但如果可能的话,它需要返回一个QuerySet,以便我可以执行以下操作:

pics_in_cats((1,2,3)).filter(visible=True)

可以通过加载所有相关的Category对象并合并它们的picture_set属性来完成,但这似乎效率低下。如果可能的话,我也想避免回退到原始SQL。

提前致谢

1 个答案:

答案 0 :(得分:3)

为什么要编写自定义函数而不使用这样的东西? (另)

pics = Picture.objects.filter(categories__in = [1,2,3]).filter(visible=True)