如果我有一个Django(1.6)模型,我可以用MyModel._meta.db_table
找到它的数据库表名。
有没有办法反过来?
我可以用一种丑陋的方式做到这一点,例如通过硬编码我们拥有的所有模型的所有表格的大型字典,但人们不记得要保持更新。
如果没有直接的方式,是否有办法获取当前安装的应用的models.pys中所有模型的列表,以便我可以动态构建该字典?
答案 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}