【问题标题】:Retrieving the Model object using table name使用表名检索模型对象
【发布时间】: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


    【解决方案1】:

    我想检索 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

    【讨论】:

      【解决方案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模型来做到这一点

      编辑:

      ContentType 提供的链接已损坏。 This may be tried instead.

      【讨论】:

        猜你喜欢
        • 2011-06-04
        • 2016-01-11
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多