16

説明:

ジェネリック関数があります

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

どうすれば上記を達成できますか?出来ますか?

4

4 に答える 4

43

私は使用しますget_model

from django.db.models import get_model

mymodel = get_model('some_app', 'SomeModel')
于 2012-09-05T14:41:49.023 に答える
26

Django 1.7以降、新しいアプリケーション読み込みシステムを優先して、django.db.models.loading は非推奨になりました(1.9で削除される予定です)。1.7のドキュメントでは、代わりに次の情報が提供されます。

$ 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'>
>>>
于 2015-07-15T09:24:09.510 に答える
4

'app_label.model_name'を渡すと、コンテンツタイプを使用できます

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()
于 2012-09-05T10:58:16.940 に答える
0

Django1.5の完全な答えは次のとおりです。

from django.db.models.loading import AppCache

app_cache = AppCache()
model_class = app_cache.get_model(*'myapp.MyModel'.split('.',1))
于 2014-09-18T19:37:29.750 に答える