在Django的ManyToManyField中进行数据库查询
我想知道怎么选择所有包含某个对象的多对多字段的对象。我有以下的模型(简化版)
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)