我有一个简单的ModelViewSet
class PersonViewSet(viewsets.ModelViewSet):
queryset = Person.objects.all().order_by('id')
serializer_class = PersonSerializer
和网址.py在
^{pr2}$我需要一个看跌期权
/persons
带着尸体
{
"id":10,
"login":"alfredo",
"avatar_url":"https://avatars.com/2222"
}
更新头像网址。但是当使用url'/persons'和方法PUT进行调用时,我得到响应代码405
{
"detail": "Method \"PUT\" not allowed."
}
(我知道更好的方法是调用'/persons/10',但是项目的要求是在body请求中添加'/persons'和id)
如何实现这个端点?在
PUT方法不是在ModelViewSet类上实现的,您可以在这里查看:http://www.cdrf.co/3.9/rest_framework.viewsets/ModelViewSet.html这是一个很好的文档,说明默认情况下实现了哪些方法。在
要使PUT方法有效,应添加以下代码:
编辑:考虑到url是:
/persons/<id>
出现此错误是因为URL
/person/
不用于PUT
请求。PUT
请求对应于viewsetsupdate
方法,update
方法需要URL中的ID,例如/person/10/
,以便检索要更新的Person
对象。在实际解决此问题的方法是扩展^{} 类,以便在列表端点上为
PUT
添加另一个操作,并自定义viewsget_object
方法以从有效负载中检索ID。在在^{} 类中,您将看到定义为:
您需要将}方法,以便它从负载中检索ID。我将提供一个自定义的
^{pr2}${'put': 'update'}
添加到# List route.
部分,然后自定义视图集的update
或{get_object
方法的示例,以支持此用例:相关问题 更多 >
编程相关推荐