我在DRF中的视图集有问题:
def get_queryset(self):
"""
:return: filtered queryset based on request query_param
"""
# todo#amedeo: improve the readability code
qs = super(ChecklistViewSet, self).get_queryset()
_pk = self.kwargs['pk']
if self.request.method == 'PUT':
instance = qs.filter(pk=int(_pk)).first()
# pass in the instance we want to update
serializer = ChecklistSerializer(instance, self.request.data)
# validate and update
if serializer.is_valid():
serializer.save()
serializer_dict = serializer.data
serializer_dict["message"] = "Checklist updated successfully."
return response.Response(serializer_dict, status=status.HTTP_200_OK)
else:
return response.Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
在我的代码中,objetc被保存了,但是响应给出了一个错误:
AttributeError: 'Response' object has no attribute 'model'
我的序列化程序是:
^{pr2}$我通过传递json的客户端PUT方法调用:
{
"approved_by": "Test",
"role": "test_role_4",
"hardship_classification": "test_6",
"total_capacity": "50",
"capacity_for_residents": "350",
"checklist_type": "permanent",
"state": "qcl_draft",
"pdf": null,
"submitting_afp": 3999,
"disabled": false,
"location": 97
}
但我接受了这个错误。模型已保存,但响应显示错误
Internal Server Error: /api/v1/checklists/3/ Traceback (most recent call last): File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner response = get_response(request) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response response = self.process_exception_by_middleware(e, request) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view return view_func(*args, **kwargs) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/viewsets.py", line 116, in view return self.dispatch(request, *args, **kwargs) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", line 495, in dispatch response = self.handle_exception(exc) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", line 455, in handle_exception self.raise_uncaught_exception(exc) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", line 483, in dispatch self.initial(request, *args, **kwargs) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", line 401, in initial self.check_permissions(request) File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/views.py", line 334, in check_permissions if not permission.has_permission(request, self): File "/home/adifilippo/.envs/accomodation/local/lib/python2.7/site-packages/rest_framework/permissions.py", line 206, in has_permission perms = self.get_required_permissions(request.method, queryset.model) AttributeError: 'Response' object has no attribute 'model' "PUT /api/v1/checklists/3/ HTTP/1.1" 500 42934
在此处输入代码
get_queryset
方法应该返回queryset
而不是{put
方法中被重写。读这里class-based-views然后 filtering获取更多详细信息。可能需要删除get_queryset
重写,只需添加put
方法,如下所示:相关问题 更多 >
编程相关推荐