如何直接查询Django为ManyToMany关系创建的表?

Posted

技术标签:

【中文标题】如何直接查询Django为ManyToMany关系创建的表?【英文标题】:How to query directly the table created by Django for a ManyToMany relation? 【发布时间】:2013-01-27 01:16:01 【问题描述】:

我有一个模型 MyModel2,其中一个 ManyToManyField 与另一个模型 MyModel1 相关。

我怎样才能得到对 mymodel1.id, mymodel2.id,如 Django 为此关系创建的表中所示?我是否必须对此表执行原始 SQL 查询,或者是否可以通过此模型的对象管理器?

class MyModel1(models.Model):
    name = models.CharField(max_length=50)
  

class MyModel2(models.Model):
    name = models.CharField(max_length=50)
    mymodel1 = models.ManyToManyField(MyModel1)

【问题讨论】:

【参考方案1】:

这是多对多字段实例:

MyModel2.mymodel1

这是中间表模型:

MyModel2.mymodel1.through

这是中间模型管理器:

MyModel2.mymodel1.through.objects

这将返回所有中间模型的查询集:

MyModel2.mymodel1.through.objects.all()

django 文档的This part 谈论through。可以自己制作through模型,否则会自动生成。

【讨论】:

'ManyToManyDescriptor' 对象没有属性 'though' 你有一个错字;)它通过了!

以上是关于如何直接查询Django为ManyToMany关系创建的表?的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 的 ManyToMany 关系中按 id 添加对象

django - manytomany 上的查询过滤器为空

Django:如何从 ManyToMany 迁移到 ForeignKey?

如何在django中查询具有manytomany字段指向它们的对象

查询 django 多对多

Django ManyToMany 关系详情详情