python - Create a generic serializer with a dynamic model in Meta -


when create serializer in django-rest0-framework, based on modelserializer, have pass model in meta class:

class clientserializer(modelserializer):     class meta:         model = client 

i want create general serializer which, based on url, includes model dynamically.

my setup thusfar includes urls.py , viewset:

urls.py:

 url(r'^api/v1/general/(?p<model>\w+)', kernel_api_views.generalviewset.as_view({'get':'list'})) 

and views.py:

class generalviewset(viewsets.modelviewset):       def get_queryset(self):             # dynamically model class myapp.models             queryset = getattr(myapp.models, model).objects.all()             return queryset       def get_serializer_class(self):          return getattr(myapp.serializers, self.kwargs['model']+'serializer') 

which in care of: http://127.0.0.1:8000/api/v1/general/client gets client.objects.all() queryset , clientserializer class serializer

question: how can make can call 'generalserializer' , dynamically assign model in it?

you can following:

serializers.py

class generalserializer(serializers.modelserializer):      class meta:         model = none 

views.py

class generalviewset(viewsets.modelviewset):       def get_queryset(self):          model = self.kwargs.get('model')          return model.objects.all()                  def get_serializer_class(self):          generalserializer.meta.model = self.kwargs.get('model')          return generalserializer   

in serializers.py, define generalserializer having model in meta none. we'll override model value @ time of calling get_serializer_class().

then in our views.py file, define generalviewset get_queryset() , get_serializer_class() overridden.

in get_queryset(), obtain value of model kwargs , return queryset.

in get_serializer_class(), set value of model generalserializer value obtained kwargs , return generalserializer.


Comments

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -