DRF UpdateAPI视图返回“详细信息”:“未找到。”

时间:2019-03-04 14:59:12

标签: python django django-rest-framework

当对我的DRF端点进行PUT或PATCH时,我得到404 "detail": "Not found."响应。我不确定是什么原因导致了错误,是我的视图还是序列化器。

缺少有关DRF的文档,并且没有可供我参考的UpdateAPIView的工作示例。

代码:

urls.py

path('api/update/job/<int:pk>/', views.UpdateJobView.as_view() ),

serializers.py

class JobsUpdateSerializer(serializers.ModelSerializer):
    designer_one = serializers.PrimaryKeyRelatedField(many=False, queryset=UserProfile.objects.all())
    designer_two = serializers.PrimaryKeyRelatedField(many=False, queryset=UserProfile.objects.all())
    class Meta:
        model = Job
        fields = '__all__'

views.py

class UpdateJobView(generics.UpdateAPIView):
    serializer_class = JobsUpdateSerializer
    lookup_field = "pk"

    def get_queryset(self):
        queryset = Job.objects.all()
        jobID = self.request.query_params.get('pk', None)
        if jobID is not None:
            queryset = queryset.filter(id=jobID)
        else:
            return False

我是否需要修改视图以包含get_object函数?

Django==2.1.3 djangorestframework==3.9.0

1 个答案:

答案 0 :(得分:1)

self.request.query_params.get('pk', None)用于获取查询参数,而不是URL参数。文档过滤页面中的示例可用于query parametersURL

在您的情况下,您无需覆盖get_querysetget_object。删除您的lookup_field,因为它默认为pk和自定义get_queryset。而是定义一个queryset,并将其余工作保留为默认的UpdateView

class UpdateJobView(generics.UpdateAPIView):
    serializer_class = JobsUpdateSerializer
    queryset = Job.objects.all()