【问题标题】:How to get a model object using model name string in Django如何在 Django 中使用模型名称字符串获取模型对象
【发布时间】:2012-08-30 01:53:42
【问题描述】:

说明:

我有一个通用函数

def gen(model_name,model_type): 
      objects = model_name.objects.all()
      for object in objects:
          object.model_type = Null      (Or some activity)
          object.save()

我怎样才能实现上述目标?有可能吗?

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    我会使用get_model:

    from django.db.models import get_model
    
    mymodel = get_model('some_app', 'SomeModel')
    

    【讨论】:

    【解决方案2】:

    从 Django 1.7 开始,django.db.models.loadingis deprecated(将在 1.9 中删除)支持新的应用程序加载系统。 1.7 docs give us 改为:

    $ python manage.py shell
    Python 2.7.6 (default, Mar  5 2014, 10:59:47)
    >>> from django.apps import apps
    >>> User = apps.get_model(app_label='auth', model_name='User')
    >>> print User
    <class 'django.contrib.auth.models.User'>
    >>>
    

    【讨论】:

      【解决方案3】:

      如果你传入“app_label.model_name”,你可以使用contenttypes,例如

      from django.contrib.contenttypes.models import ContentType
      
      model_type = ContentType.objects.get(app_label=app_label, model=model_name)
      objects = model_type.model_class().objects.all()
      

      【讨论】:

        【解决方案4】:

        Django 1.5 的完整答案是:

        from django.db.models.loading import AppCache
        
        app_cache = AppCache()
        model_class = app_cache.get_model(*'myapp.MyModel'.split('.',1))
        

        【讨论】:

          猜你喜欢
          • 2015-06-18
          • 2016-03-26
          • 2011-06-19
          • 2011-09-28
          • 2016-10-30
          • 2018-03-10
          • 2011-06-20
          • 2013-11-21
          • 1970-01-01
          相关资源
          最近更新 更多