1

来自 Django 文档:

后向关系怎么可能?

其他对象关系映射器要求您定义双方的关系。Django 开发人员认为这违反了 DRY(Don't Repeat Yourself)原则,因此 Django 只要求您在一端定义关系。

但是这怎么可能呢,因为模型类在加载其他模型类之前不知道哪些其他模型类与之相关?

答案在于 INSTALLED_APPS 设置。第一次加载任何模型时,Django 会遍历 INSTALLED_APPS 中的每个模型,并根据需要在内存中创建反向关系。本质上,INSTALLED_APPS 的功能之一是告诉 Django 整个模型域。

有没有办法得到这个 ORM 模型?我正在尝试调试一些不是自动创建的反向关系,这将有助于查看 Django 创建的整个 ORM。

4

2 回答 2

1

没有特定的 ORM“模型”,但是有一些东西可以帮助你。

from django.db.models.loading import get_models

get_models()将为您返回每个已注册模型的列表,此列表是您所描述的循环机制。

YourModel._meta.get_all_related_objects_with_model()

该函数遍历每个注册模型中的每个字段,并找到任何反向关系并将其返回给您的YourModel.

(是一个对象)的Options类是寻找这些东西的好地方。django.db.models.optionsYourModel._metaOptions

于 2013-09-30T11:38:21.367 回答
0

Django 没有“创建” ORM,所以这个问题没有意义。如果您想知道 ORM 为您的模型类添加了哪些属性以支持反向关系,那么您可以

  1. 打开一个 django shell,导入你的模型并检查它们
  2. 阅读源代码(嘿,它是开源的,不是吗?)
  3. 如果这还不够,请在适当的位置添加断点并通过调试器运行整个过程
于 2013-09-30T11:36:25.113 回答