IF..ELIF条件でクラス名を明示的に指定しなくても、Javaで行われるのと同様の方法で、Pythonでクラスをその名前でインスタンス化する一般的な方法を探しています。
これは、いくつかの異なるモデルとシリアライザーがあり、HTTP 要求のパラメーターでそれらをアドレス指定できるようにしたいためです。疎結合とモジュール性を高めるためです。
たとえばhttps://www.domain.com/myapp/sampledata.json?model=<modelname>
、クラス<modelname>
とを取得する必要があります<modelname>Serializer
。
https://docs.djangoproject.com/en/1.7/ref/models/queries/
以前get_model
は同様の目的で使用されていたDjango 1.7 以降、これにはいくつかの変更があります。
Django 1.7 以降、django.db.models.loading は廃止され (1.9 で削除される予定)、新しいアプリケーション ローディング システムが採用されています。
警告:
RemovedInDjango19Warning: django.db.models.loading のユーティリティは、新しいアプリケーション ローディング システムを支持して廃止されました。
f(*args, **kwds) を返す
文字列からクラスを取得するには、次のコードをどのように変更する必要がありますか?
ビュー.py
from myapp.models import Samplemodel, Simplemodel1, Simplemodel2
from myapp.serializers import SamplemodelSerializer, Simplemodel1Serializer, Simplemodel2Serializer
from django.db.models.loading import get_model # deprecated
from myapp.jsonp_decorator import json_response
@json_response
def sampledata(request):
model = request.GET.get('model','Samplemodel')
if model=='Samplemodel':
modelName = "Samplemodel"
serializer = SamplemodelSerializer
elif model=='Simplemodel1':
modelName = "Simplemodel1"
serializer = Simplemodel1Serializer
elif model=='Simplemodel2':
modelName = "Simplemodel2"
serializer = Simplemodel2Serializer
return serializer(get_model("myapp",modelName).objects.all(), many=True)