当对我的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
答案 0 :(得分:1)
self.request.query_params.get('pk', None)
用于获取查询参数,而不是URL参数。文档过滤页面中的示例可用于query parameters和URL。
在您的情况下,您无需覆盖get_queryset
或get_object
。删除您的lookup_field
,因为它默认为pk
和自定义get_queryset
。而是定义一个queryset
,并将其余工作保留为默认的UpdateView
:
class UpdateJobView(generics.UpdateAPIView):
serializer_class = JobsUpdateSerializer
queryset = Job.objects.all()