首页 文章

Django REST框架非模型序列化器和BooleanField

提问于
浏览
2

在尝试处理以下用例时,我似乎遇到了令人费解的结果:

URL: '^api/event/(?P<pk>[0-9]+)/registration$'
payload: {"registered": "true"} or {"registered": "false"}

我检索对应于给定pk的事件对象,然后根据我想要的:

  • 在GET请求中检索是否已注册经过身份验证的用户
    _999_在PUT中改变注册状态 .

一切正常,直到我想在PUT请求中处理传入的有效负载 . 我试过像这样创建一个序列化器:

class RegistrationSerializer(serializers.Serializer):
    registered = fields.BooleanField()

并从APIView的put方法调用它:

serializer = RegistrationSerializer(data=request.DATA)

但它不起作用 serializer.data 总是包含`{"registered":False}

从一个shell我尝试了另一个孤立的测试:

>>> rs = RegistrationSerializer(data={'registered':True})
>>> rs
<app.serializers.RegistrationSerializer object at 0x10a08cc10>
>>> rs.data
{'registered': False}

我究竟做错了什么?处理这个用例的最佳方法是什么?

1 回答

  • 1

    在访问 rs.data 之前,您需要先调用 rs.is_valid() .

    如果你不这样做,那么框架真的应该引发异常 .

相关问题