Я ищу общий способ в Python для создания экземпляра класса по его имени аналогичным образом, как это делается на Java без явного указания имени класса в условии IF..ELIF.Django get class from string
Это связано с тем, что у меня есть несколько различных моделей и сериализаторов и вы хотите, чтобы они были адресованы параметрами в 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 (* арг, ** 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
Вы правы, это хорошо работает, я опубликую обновленный код здесь. –