给定一个数据库 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}
如果我有一个 Django (1.6) 模型,我可以通过 MyModel._meta.db_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}