2016-06-08 50 views
2

我想找回Model對象,而知道table_name的檢索用表名

對於離Model對象:

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

是否有采取my_users_table作爲輸入返回User方式?

回答

4

我想找回Model對象

我想你在這裏的意思是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名稱的模型,則modelNone

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模型