Django:RelatedManager 对象是如何实例化的?

Posted

技术标签:

【中文标题】Django:RelatedManager 对象是如何实例化的?【英文标题】:Django: How is a RelatedManager object instantiated? 【发布时间】:2018-09-06 14:56:29 【问题描述】:

假设我有两个modelsBookAuthor

如果我现在添加一个ForeignKey fieldBook 将它连接到Author,并实例化一个Book object - 那么我也可以通过Book object 访问它连接到的Author object(通过.book_set,如果没有指定related_name)。根据我阅读文档的理解,此访问权限是通过Author object 上的Related Manager object 提供的。

RelatedManager-object 是什么时候创建的?或者它已经在每个Author object 上都有一个object,但是在实例化一个新的Book 时连接到每个Book 对象?如果是这样,它如何连接到Book object?

据我所知,文档中没有提到这一点。

在文档中:

如果模型有外键,外键模型的实例将 有权访问返回第一个的所有实例的 Manager 型号。

【问题讨论】:

您为什么需要这些信息并尝试查看代码? 【参考方案1】:

你可以问 Django,它会给你一些曲目:

>>> Author.book_set
<django.db.models.fields.related_descriptors.ReverseManyToOneDescriptor object at 0x7f41aa1920f0>
>>> Author.objects.first().book_set
<django.db.models.fields.related_descriptors.create_reverse_many_to_one_manager.<locals>.RelatedManager object at 0x7f41a9e46828>

【讨论】:

以上是关于Django:RelatedManager 对象是如何实例化的?的主要内容,如果未能解决你的问题,请参考以下文章

django2.0+反向查询抛异常处理

在 Django 2 中模拟 RelatedManager

Django RelatedManager 的 .create() 用法?

TypeError:“RelatedManager”对象不可迭代

'RelatedManager'对象没有属性'save'

Django Models