获取Django创建的ORM

时间:2013-09-30 10:25:53

标签: django orm django-models

来自Django文档:

  

如何实现落后关系?

     

其他对象关系映射器要求您定义关系   双方。 Django开发人员认为这违反了   DRY(不要重复自己)原则,所以Django只需要你   在一端定义关系。

     

但是如果模型类不知道哪个是可能的,那怎么可能呢?   其他模型类与其相关,直到其他模型类   加载?

     

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

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

2 个答案:

答案 0 :(得分:1)

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

from django.db.models.loading import get_models

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

YourModel._meta.get_all_related_objects_with_model()

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

来自Options的{​​{1}}课程(django.db.models.options是一个YourModel._meta对象)是一个值得环顾四周的好地方。

答案 1 :(得分:0)

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

  1. 打开django shell,导入模型并检查它们
  2. 阅读源代码(嘿,它的开源不是吗?)
  3. 如果这还不够,可以在适当的位置添加断点并通过调试器运行整个事情