2016-06-28 5 views
3

Я работаю в форме, которая должна использовать класс сериализатора рамки django rest в качестве формы. Позвольте мне показать вам немного кода, чтобы вы могли лучше понять.Django Rest Framework - почему serializer.data пуст

В моей модели у меня есть свойство, которое возвращает класс сериализатора динамически:

@property 
def content_serializer_class(self): 
    backend_module = self.backend_module 

    if backend_module == "youtube": 
     return YoutubeSerializer 
    elif backend_module == "googleplay": 
     return GoogleplaySerializer 
    elif backend_module == "bellone": 
     return BelloneSerializer 
    elif backend_module == "rogersvod": 
     return RogersvodSerializer 

Тогда у меня есть мнение:

class ContentCreateView(LoginRequiredMixin, PermissionRequiredMixin, APIView): 
    renderer_classes = [TemplateHTMLRenderer] 
    template_name = 'delivery/content_form.html' 
    permission_required = 'delivery.change_delivery' 

    def get(self, request, delivery_id): 
     delivery = get_object_or_404(Delivery, pk=delivery_id,owner=self.request.user) 
     if not delivery.can_change: 
      raise Http404 

     return Response({'serializer': delivery.content_serializer_class, 'delivery': delivery}) 

    def post(self, request, delivery_id): 
     delivery = get_object_or_404(Delivery, pk=delivery_id,owner=self.request.user) 
     if not delivery.can_change: 
      raise Http404 

     serializer = delivery.content_serializer_class(data=request.data) 

     if not serializer.is_valid(): 
      return Response({'serializer': delivery.content_serializer_class, 'delivery': delivery}) 

     print 'serializer', serializer.data 

     nextUrl = self.request.POST.get("next", "") 
     if nextUrl: 
      return redirect(nextUrl) 
     else: 
      return redirect(reverse('delivery:delivery-detail', args=[delivery_id])) 

И мой шаблон:

<form role="form" id="form-content" class="form-horizontal" method="post"> 
    {% csrf_token %} 
    <input type="hidden" id="id-next" name="next" value="" /> 
    {% render_form serializer template_pack='rest_framework/horizontal' %}    
</form> 

I Следующее this guide.

Проблема в том, что когда я пытаюсь получить json из сериализатора (serializer.data), он пуст. Валидация работает правильно, форма отображается правильно, но данные json пусты.

Что мне не хватает? Спасибо за любую помощь.

ответ

2

В формате обычно

mymodel = MyModel.objects.get(id=model_id) 
    serializer = MyModelSerializer(mymodel,many=False) # for single object 

так на уровне класса он должен быть:

def content_serializer_class(self): 
    backend_module = self.backend_module 

    if backend_module == "youtube": 
     return YoutubeSerializer(self,many=False) 

    elif backend_module == "googleplay": 
     return GoogleplaySerializer(self,many=False) 

    elif backend_module == "bellone": 
     return BelloneSerializer(self,many=False) 

elif backend_module == "rogersvod": 
    return RogersvodSerializer(self,many=False) 
+0

Спасибо за ваш ответ. Этот сериализатор не связан ни с одной моделью, это просто для создания json. Я все равно попробую, спасибо –

Смежные вопросы