Sim*_*ead 6 python django rest django-rest-framework
我有一个带有分层资源的django-rest-framework REST API.我希望能够通过POST来创建子对象,/v1/objects/<pk>/subobjects/
并让它自动将新子对象上的外键设置为pk
来自URL 的kwarg,而不必将其放在有效负载中.目前,序列化程序导致400错误,因为它期望object
外键在有效负载中,但它也不应被视为可选.子对象的URL是/v1/subobjects/<pk>/
(因为父对象的密钥不需要识别它),所以如果我想要PUT
现有资源,它仍然是必需的.
我应该这样做,以便你/v1/subobjects/
在有效负载中使用父级POST来添加子对象,还是有一种干净的方法将pk
kwarg从URL传递给序列化器?我正在使用HyperlinkedModelSerializer
并ModelViewSet
作为我各自的基类.有一些推荐的方法吗?到目前为止,我唯一的想法是完全重新实现ViewSets并创建一个自定义的Serializer类,其get_default_fields()来自一个从ViewSet传入的字典,由其kwargs填充.这似乎涉及一些我认为完全是普通的东西,所以我不禁想到我错过了一些东西.我见过的每个REST API都有可写端点这种基于URL的参数推断,所以django-rest-framework似乎根本无法做到这一点似乎很奇怪.
使父对象序列化器字段只读。它不是可选的,但也不是来自请求数据。相反,你从 URL 中提取 pk/slug pre_save()
...
# Assuming list and detail URLs like:
# /v1/objects/<parent_pk>/subobjects/
# /v1/objects/<parent_pk>/subobjects/<pk>/
def pre_save(self, obj):
parent = models.MainObject.objects.get(pk=self.kwargs['parent_pk'])
obj.parent = parent
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2609 次 |
最近记录: |