【发布时间】:2022-06-25 20:15:48
【问题描述】:
我有这样的视图集:
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 的相同方法永远不会被调用。
不仅如此,我还尝试在 generics.CreateAPIView.post() 和 CreateModelMixin.create() 函数中添加 pdb.set_trace(),并且在我发出 POST 请求后都没有停止。
所以其他东西正在处理这个 POST 请求并插入数据库,我只是不知道是什么。以及如何覆盖它,以便我可以自定义应该对发布请求执行什么操作?
PS.:另外,我不认为是路由问题,我的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)
【问题讨论】:
标签: python-3.x django django-rest-framework post-redirect-get