获取由Django创建的ORM

从Django文档:

落后的关系如何可能?

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

但是这怎么可能呢,因为一个模型类不知道哪些其他模型类与它相关,直到这些其他模型类被加载?

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

有没有办法得到这个ORM模型? 我试图调试一些不是自动创建的反向关系,它会真正帮助您查看整个ORM Django创建的关系。


没有特定的ORM“模型”,但有几件事可能会对您有所帮助。

from django.db.models.loading import get_models

get_models()会返回给你一个每个注册模型的列表,这个列表就是你正在描述的机制所循环的内容。

YourModel._meta.get_all_related_objects_with_model()

此函数遍历每个注册模型中的每个字段,并找到并返回任何反向关系到YourModel

django.db.models.optionsOptions类( YourModel._meta是一个Options对象)是查看这些东西的好地方。


Django不会“创建”一个ORM,所以这个问题没有意义。 如果你想知道ORM为你的模型类添加什么样的属性来支持后向关系,那么你可以

  • 打开Django外壳,导入模型并检查它们
  • 阅读源代码(嘿,它是开源的不是吗?)
  • 如果这还不够,请在适当的位置添加断点并通过调试器运行整个事件
  • 链接地址: http://www.djcxy.com/p/60209.html

    上一篇: Get the ORM that is created by Django

    下一篇: Django manytomany: adding multiple, non