DRF版本是3.11.2
我正在编写一些现有代码,向视图集中添加一个额外的“删除”操作,但我得到了
405 Method not allowed
考虑下面的例子
class UserViewSet(ModelViewSet):
....
queryset = User.objects.all()
http_method_names = ['get', 'post']
@action(detail=True, method=['delete'])
def delete_profile(self, request, pk=None)
Profile.objects.get(user=pk).delete()
....
就像我说的,当我调用delete方法
/user/123/delete_profile
,我明白了
405方法不允许
然而,如果我加上
delete
到
http_method_names
如下所示,它运行良好。
class UserViewSet(ViewSet):
....
queryset = User.objects.all()
http_method_names = ['get', 'post', 'delete']
@action(detail=True, method=['delete'])
def delete_profile(self, request, pk=None)
Profile.objects.get(user=pk).delete()
....
但这并不理想,因为我不想允许对用户执行“删除”操作,同时我可以覆盖
删去
/
destroy
要避免用户在viewset上被删除,此方法非常优雅。
所以问题是,这是一个bug还是设计的?所谓设计,我指的是由
@action
假设正在处理在中定义的相同模型
ModelViewSet
(在这种情况下是用户,而不是个人资料)?