给定一个数据库 table 名称,Django 可以告诉我哪个模型与它相关吗?

Given a database table name, can Django tell me which Model relates to it?

如果我有一个 Django (1.6) 模型,我可以通过 MyModel._meta.db_table.

找到它的数据库 table 名称

有什么办法可以反过来吗?

我可以用一种丑陋的方式来做到这一点,例如通过硬编码我们拥有的所有 tables 的大型字典我们拥有的所有模型,但人们不会记得保持更新。

如果没有直接的方法,是否有办法获取当前安装的应用程序 models.pys 中所有模型的列表,以便我可以动态构建该字典?

使用django.db.models.get_models()函数:

from django.db import models

db_table = 'auth_user'    
mlist = [model for model in models.get_models(include_auto_created=True)
               if model._meta.db_table == db_table]
model = mlist[0] if mlist else None

每个模型都知道自己的 table 并将其保存在 Model._meta.db_table 中。您可以将其与 my answer here 结合使用以获得所有模型,因此它看起来像:

from django.db.models import get_models
models = get_models(include_auto_created=True)
table_dict = {model._meta.db_table:model for model in models}