我正在尋找一種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
你是對的,它運作良好我會在這裏發佈更新的代碼。 –