我有一个带分级资源的django-rest-framework REST API。我希望能够通过发布到/v1/objects/<pk>/subobjects/
来创建子对象,并让它自动将新子对象上的外键设置为来自URL的pk
kwarg,而不必将其置于有效载荷中。目前,序列化程序正在导致400错误,因为它期望object
外键位于有效内容中,但它也不应被视为可选项。子对象的URL是/v1/subobjects/<pk>/
(因为父项的密钥不必标识它),所以如果我想PUT
现有资源仍然需要。Django REST框架:使用URL参数创建分层对象
我应该这样做,以便您发送到/v1/subobjects/
与有效载荷中的父母添加子对象,或者有一个干净的方法来将URL从URL传递到序列化程序?我使用HyperlinkedModelSerializer
和ModelViewSet
作为我各自的基类。有没有一些建议的方式来做到这一点?到目前为止,我唯一的想法是完全重新实现ViewSets并创建一个自定义Serializer类,它的get_default_fields()来自一个从ViewSet传入的字典,由它的kwargs填充。这似乎与我认为是完全普通的事情相关,所以我不禁想到我错过了一些东西。我见过的每个REST API都有可写端点,这种基于URL的参数推理,所以django-rest-framework似乎根本无法做到的事实似乎很奇怪。
'pre_save'在反序列化之前不会被调用,此时它已经引发了验证错误。 –
啊,好的。答案已更新。 –
这是一个选项,可以用于评论之类的东西,但我拥有的某些对象应该可以重新设置,因此在PUT中显式设置父项也会很好。另一方面,我可以这样做,然后有一个明确的'重新启动'POST动作或其他东西,但这看起来不那么RESTful。我会接受这个答案,因为这是一个好主意,并且适用于大多数情况。 –