我有一个这样的视图集:
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)
我认为你需要使用确切的类,以便使用POST
api。
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")
]