【问题标题】:Django Rest Framework - why serializer.data is emptyDjango Rest Framework - 为什么 serializer.data 为空
【发布时间】:2016-10-31 11:07:20
【问题描述】:

我正在使用必须使用 django rest 框架序列化程序类作为表单的表单。让我给你看一些代码,以便你更好地理解。

在我的模型中,我有一个动态返回序列化程序类的属性:

@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>  

我正在关注this guide

问题是,当我尝试从序列化程序 (serializer.data) 获取 json 时,它是空的。验证正常,表单渲染正常但json数据为空。

我错过了什么?感谢您的帮助。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    格式正常

      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)
    

    【讨论】:

    • 感谢您的回答。这个序列化器没有链接到任何模型,这只是为了创建一个 json。无论如何,我会尝试,谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多