Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Django Rest框架删除请求的响应类似于GET请求_Python 3.x_Django_Django Rest Framework_Httprequest - Fatal编程技术网

Python 3.x Django Rest框架删除请求的响应类似于GET请求

Python 3.x Django Rest框架删除请求的响应类似于GET请求,python-3.x,django,django-rest-framework,httprequest,Python 3.x,Django,Django Rest Framework,Httprequest,我试图删除数据库中由modelviewset get_queryset返回的条目。通过DRF web界面和邮递员发送删除请求时,我会收到此响应“DELETE/api/remove_self/3 HTTP/1.1”200以及我试图删除的数据。给出此结果的代码如下所示: 型号.py class EventAtendee(models.Model): """Lists users atending an event""" #b

我试图删除数据库中由modelviewset get_queryset返回的条目。通过DRF web界面和邮递员发送删除请求时,我会收到此响应“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
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()
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'})),
  
]
视图.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
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()
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'})),
  
]
url.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
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()
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'})),
  
]
router=DefaultRouter(尾部斜杠=False)
router.register('events',views.EventAtendeeViewSet,basename='EventAtendee')
URL模式=[
路径('remove_self/',views.removeselfromevent.as_view({'get':'list','delete':'list'})),
]

非常感谢您的帮助

您正在将URL中的方法
DELETE
映射到
list

path('remove_self/',views.removeselfromevent.as_view({'get':'list','delete':'list'),

正确的做法:

path('remove_self/',views.removeselfromevent.as_view({'get':'list','delete':'destroy'),

各种方法的映射:

  • 发布
    创建
  • 获取
    检索
  • PUT
    update
  • 补丁
    部分更新
  • 删除
    销毁

我修复了此问题,但现在出现以下错误:预期使用名为“pk”的URL关键字参数调用view RemoveSelfFromEvent。修复URL配置,或在视图上正确设置
.lookup\u字段
属性。你知道怎么解决这个问题吗?知道。将
替换为