【发布时间】:2016-03-05 03:52:15
【问题描述】:
我正在寻找一种在 Python 中通过类名来实例化类的通用方式,其方式与在 Java 中的实现方式类似,而无需在 IF..ELIF 条件中显式指定类名。
这是因为我有几个不同的模型和序列化程序,并希望通过 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 中删除)以支持新的应用程序加载系统。
警告:
RemovedInDjango19警告: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)
【问题讨论】:
标签: generics django-models generic-programming django-1.8 django-serializer