【发布时间】:2021-09-23 12:21:55
【问题描述】:
我已经在网上寻找这个反复出现的问题的所有可能解决方案,但我没有尝试过任何工作。
我有一个检索和创建特定信息的视图集。作为参考,检索和创建该信息是特定于每个用户的。如果用户已经创建了条目,则不允许他们创建另一个条目。
目前获取和创建的两种方法如下:
class MyViewSet(ModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MySerializer
def get_queryset(self):
return self.queryset.filter(user=self.request.user.username)
def create(self, request, *args, **kwargs):
result = MyModel.objects.filter(user=request.user.username)
if (result):
return Response(status=405)
# Otherwise, create an entry for that user
这两个操作的端点都不在 URL 中包含任何参数。换句话说,它们是GET /my-endpoint/ 和POST /my-endpoint/(因为每个操作都是特定于用户的)
现在,我正在尝试使用destroy() 添加删除操作。我知道 destroy() 有时需要 pk,但从我在网上看到的情况来看,您可以通过指定 pk=None 来绕过它,如下所示。正如我之前提到的,my-endpoint/ 不需要 URL 中的任何参数或参数,因此可以通过调用 DELETE my-endpoint/ 来删除给定用户的条目。
结果,我得到了:
def destroy(self, request, pk=None):
# This isn't being called when hitting DELETE my-endpoint/. Instead, I get an error as below
[ "detail": "方法 "DELETE" 不允许。" ]
如果知道我没有将任何参数传递给 my-endpoint/ 以进行 DELETE,我该如何解决这个问题?
【问题讨论】:
标签: python mysql sql django django-rest-framework