python-3.x - Django Rest Framework DELETE 请求像 GET 请求一样响应
问题描述
我正在尝试删除模型视图集 get_queryset 返回的数据库中的条目。通过 DRF Web 界面和邮递员发送 DELETE 请求时,我收到此响应“DELETE /api/remove_self/3 HTTP/1.1”200 以及我要删除的数据。给出此结果的代码如下所示:
模型.py
class EventAtendee(models.Model):
"""Lists users atending an event"""
#below connects user profile to event
id = models.AutoField(primary_key=True)
event_id = models.IntegerField(null = True)
user_profile = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
def __str__(self):
return self.event_id
视图.py
class RemoveSelfFromEvent(viewsets.ModelViewSet):
"""Remove Yourself From an Event you were attending"""
authentication_classes = (TokenAuthentication,)
serializer_class = serializers.EventAtendeeSerializer
permission_classes = (permissions.UpdateOwnStatus, IsAuthenticated)
def perform_create(self, serializer):
"""Sets the user profile to the logged in user"""
#
serializer.save(user_profile=self.request.user)
def get_queryset(self):
"""
This view should return a list of all the purchases for
the user as determined by the username portion of the URL.
"""
#user_profile = self.kwargs['user_profile']
event_id = self.kwargs['event_id']
return models.EventAtendee.objects.filter(event_id=event_id, user_profile=self.request.user)
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
self.perform_destroy(instance)
return Response(status=status.HTTP_204_NO_CONTENT)
def perform_destroy(self, instance):
instance.delete()
网址.py
router = DefaultRouter(trailing_slash=False)
router.register('events', views.EventAtendeeViewSet, basename='EventAtendee')
urlpatterns = [
path('remove_self/<event_id>', views.RemoveSelfFromEvent.as_view({'get': 'list', 'delete': 'list'})),
]
任何帮助深表感谢!
解决方案
您正在将方法映射DELETE
到list
您的网址中。
path('remove_self/<event_id>', views.RemoveSelfFromEvent.as_view({'get': 'list', 'delete': 'list'})),
正确的做法:
path('remove_self/<pk>', views.RemoveSelfFromEvent.as_view({'get': 'list', 'delete': 'destroy'})),
各种方法的映射:
POST
:create
GET
:retrieve
PUT
:update
PATCH
:partial_update
DELETE
:destroy
推荐阅读
- reactjs - 使用道具传播的 Thunk 问题加载 HOC
- node.js - 使用 ffmpeg 与 facebook rtmps 传输问题的 GoLive
- json - 如何将谷歌云视频智能结果的 json 文件获取到谷歌云存储桶中
- python-2.7 - 如果一个代理很好,那么如何只坚持该代理直到被禁止然后移动到另一个代理,在scrapy-proxy-rotation中?
- android - 回调和更新数据
- c++ - 将引用作为函数参数传递不起作用
- node.js - Node.js - 此代码运行时 Heroku 服务器崩溃
- javascript - 调整大小后显示小画布
- reactjs - 将中间件代码从 app.js 移到它自己的函数和文件中
- python - 如何使用 libclang 和 python 解析 c++ 模板类?