我正在寻找一种Python中的通用方法,以类似的方式实例化类的名称,而不必在IF..ELIF条件中显式指定类名。Django从字符串获取类
这是因为我有几个不同的模型和序列化器,并希望通过HTTP请求中的参数使它们可寻址。这是为了增强松耦合和模块化。
例如https://www.domain.com/myapp/sampledata.json?model=<modelname>
应该得到类别<modelname>
和<modelname>Serializer
。
由于Django 1.7 https://docs.djangoproject.com/en/1.7/ref/models/queries/
,之前get_model
被用于类似的目的,所以有一些变化。
作为Django的1.7 django.db.models.loading的,而倾向于使用新的应用程序加载系统的弃用(待 在1.9移除)。
警告:
RemovedInDjango19Warning:在django.db.models.loading 公用事业支持新的应用程序加载系统中已被弃用。
回报F(* ARGS,** kwds)
应该如何将下面的代码进行修改,以从字符串获取类?
views.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)
似乎与属性工作,我需要类似于模型和序列化器的东西 –
它将适用于模块内的类也是如此。它们是模块的属性。 – eugecm
你是对的,它运作良好我会在这里发布更新的代码。 –