在Django的ManyToManyField中进行数据库查询

1 投票
1 回答
2250 浏览
提问于 2025-04-15 16:31

我想知道怎么选择所有包含某个对象的多对多字段的对象。我有以下的模型(简化版)

class Category(models.Model):
    pass

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

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

def pics_in_cats(cat_ids=()):
    pass

但是,如果可以的话,它需要返回一个查询集,这样我就可以做类似这样的操作:

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

可以通过加载所有相关的类别对象,然后合并它们的图片集合来实现,但这样似乎效率不高。我也希望尽量避免使用原始SQL。

提前谢谢你们

1 个回答

3

为什么要写一个自定义函数,而不直接使用像这样的东西呢?(这个代码没有经过测试)

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

撰写回答