使用表名检索Model对象

时间:2016-06-08 04:33:38

标签: django django-models

我想在知道table_name

的同时检索Model对象

例如:

class User(models.Model):
    class Meta:
        db_table = 'my_users_table'

是否有办法以User作为输入返回my_users_table

2 个答案:

答案 0 :(得分:4)

  

我想检索Model对象

我认为你的意思是这里的Model类而不是object。

我能想到的一个可能的解决方案是获取所有模型并匹配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

答案 1 :(得分:2)

我认为没有直接的方法可以做到这一点。但是你可以创建自己的功能,为你做这件事。

基于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型号

执行此操作