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

时间:2015-02-25 14:02:46

标签: django django-models

如果我有一个Django(1.6)模型,我可以用MyModel._meta.db_table找到它的数据库表名。

有没有办法反过来?

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

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

2 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:1)

每个模型都知道自己的表并将其保留在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}