【问题标题】:Django REST framework non-model serializer and BooleanFieldDjango REST 框架非模型序列化器和 BooleanField
【发布时间】:2013-03-31 17:26:57
【问题描述】:

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

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

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

  • 在 GET 请求中检索经过身份验证的用户是否已注册
  • 在 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}

我做错了什么?处理此用例的最佳方法是什么?

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您需要先调用rs.is_valid(),然后才能访问rs.data

    如果你不这样做,框架确实应该引发异常。

    【讨论】:

    • 成功了!谢谢汤姆。我再次检查了文档,确实在“验证”部分中指出应该始终调用 .is_valid() 方法,但我完全错过了它。
    猜你喜欢
    • 2016-04-07
    • 2012-11-16
    • 2017-11-15
    • 2014-07-26
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多