【问题标题】:Database query across django ManyToManyField跨 django ManyToManyField 的数据库查询
【发布时间】:2010-12-21 15:13:54
【问题描述】:

我想了解如何选择其 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)

这可以通过加载所有相关的类别对象并合并它们的图片集属性来完成,但这似乎效率低下。如果可能的话,我还想避免使用原始 SQL。

提前致谢

【问题讨论】:

    标签: python django django-database


    【解决方案1】:

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

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

    【讨论】:

    • 这行得通——但我不知道为什么:) 那是说'任何类别的主键都匹配 1、2、3 中的任何一个'?我可以说 filter(categories__name__in=['foo','bar']) 以获取名称为 foo 或 bar 的类别中的所有图片吗?
    • 没错。要查看 Django 构建查询的所有可能性,请查看此处:docs.djangoproject.com/en/dev/topics/db/queries
    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2020-04-25
    • 2019-09-06
    • 2012-07-04
    • 2014-06-12
    相关资源
    最近更新 更多