DRF 在接收 POST 请求时不调用 post() 方法



我有一个这样的视图集:

class MyViewSet(CreateAPIView, RetrieveModelMixin, ListModelMixin, GenericViewSet):
queryset = MyModel.objects.all()
serializer_class = MySerializer
def post(self, request, *args, **kwargs):
import pdb; pdb.set_trace()
class MySerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = MyModel
fields = ['id', 'field1', 'field2'] #only field1 is required in the model

GET请求列表和检索工作完美。当我发出POST请求时,发送field1,我得到一个状态201和一个新记录被添加到数据库中,所以它也工作.

但是我的方法MyViewSet.post()应该覆盖相同的generics.CreateAPIView从未被调用。

不仅如此,但是我试图添加pdb.set_trace(),字面上在generics.CreateAPIView.post()CreateModelMixin.create()函数内,并且一旦我发出POST请求,也不会停止。

所以别的东西正在处理这个POST请求并插入到DB中,我只是不知道什么。我如何重写它,这样我就可以定制一个帖子请求应该做什么?

p。:另外,我不认为这是路由问题,我的urls.py:

from rest_framework import routers
from myapp.views import MyViewSet, AnotherViewSet
router = routers.DefaultRouter()
router.register(r'route_one', MyViewSet)
router.register(r'route_two', AnotherViewSet)

我认为你需要使用确切的类,以便使用POSTapi。

class MyView(CreateModelMixin, ListModelMixin, generics.GenericAPIView):
queryset = MyModel.objects.all()
serializer_class = MySerializer
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)

在urls . py

from django.urls import path
from .views import MyView
urlpatterns = [
path('route_one', MyView.as_view(), name="my_view_detail")   
]