【发布时间】:2016-06-08 04:33:37
【问题描述】:
我想在知道 table_name 的同时检索 Model 对象
例如:
class User(models.Model):
class Meta:
db_table = 'my_users_table'
有没有通过将my_users_table 作为输入来返回User 的方法?
【问题讨论】:
标签: django django-models
我想在知道 table_name 的同时检索 Model 对象
例如:
class User(models.Model):
class Meta:
db_table = 'my_users_table'
有没有通过将my_users_table 作为输入来返回User 的方法?
【问题讨论】:
标签: django django-models
我想检索
Model对象
我认为您的意思是这里的模型类而不是对象。
我能想到的一个可能的解决方案是获取所有模型并匹配db_table:
from django.apps import apps
model = next((m for m in apps.get_models() if m._meta.db_table=='my_users_table'), None)
如果没有具有给定 db_table 名称的模型,则 model 将是 None。
【讨论】:
我认为没有直接的方法可以做到这一点。但是您可以创建自己的函数来为您执行此操作。
基于https://stackoverflow.com/a/29739109/3627387
from django.apps import apps
def get_model_by_db_table(db_table):
for model in apps.get_models():
if model._meta.db_table == db_table:
return model
else:
# here you can do fallback logic if no model with db_table found
raise ValueError('No model found with db_table {}!'.format(db_table))
# or return None
或者你可以使用ContentType模型来做到这一点
编辑:
为 ContentType 提供的链接已损坏。 This may be tried instead.
【讨论】: