728x90
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\django\core\handlers\base.py", line 204, in _get_response
response = response.render()
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\django\template\response.py", line 105, in render
self.content = self.rendered_content
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\response.py", line 70, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\renderers.py", line 724, in render
context = self.get_context(data, accepted_media_type, renderer_context)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\renderers.py", line 656, in get_context
raw_data_put_form = self.get_raw_data_form(data, view, 'PUT', request)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\renderers.py", line 563, in get_raw_data_form
data = serializer.data.copy()
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\serializers.py", line 548, in data
ret = super().data
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\serializers.py", line 246, in data
self._data = self.to_representation(self.instance)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\serializers.py", line 515, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\serializers.py", line 515, in to_representation
ret[field.field_name] = field.to_representation(attribute)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\serializers.py", line 502, in to_representation
attribute = field.get_attribute(instance)
File "C:\Users\Administrator\project\djangovenv\lib\site-packages\rest_framework\fields.py", line 490, in get_attribute
raise type(exc)(msg)
AttributeError: Got AttributeError when attempting to get a value for field `image` on serializer `InsuranceSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `RelatedManager` instance.
Original exception text was: 'RelatedManager' object has no attribute 'image'.
Got AttributeError when attempting to get a value for field `image` on serializer `InsuranceSerializer`
frontend쪽에서 api 호출 시에는 정상적으로 응답이 오는데 BrowsableAPI에서만 에러가 뜬다면..
그리고 에러가 위의 내용과 비슷하면 이유는 간단하다.
ModelSerializer에서 만들어지는 데이터를 기반해서 BrowsableAPI에서 form field들을 자동으로 생성한다.
하지만 간혹 FK로 연결된 필드를 어떠한 이유로든 many=True가 아닌 하나의 오브젝트로만 return 해야하는 상황이 있을 수도 있다.
그 경우 serializer는 singleobject 기준으로 데이터를 만들어내고 있는데, 실제 폼필드에서는 ModelSerializer에서 FK이기 때문에 자기자신 관점에서 many 관계라고 생각하기 때문이다.
그래서 해결방법은 form_field 자체를 없애주면된다.
그럼 데이터 반환은 정상적으로 되고, 폼필드에서 FK를 기준으로 데이터를 생성할 필요가 없으니 정상적으로 Browsable API도 사용가능하게된다.
bradmontgomery.net/blog/disabling-forms-django-rest-frameworks-browsable-api/
방법은 위의 링크를 참고해라~
BrowsableAPI를 오버라이딩하는 적절한 코드이다.
728x90
'IT > Django' 카테고리의 다른 글
django timezone과 시간 안맞는 경우 (0) | 2021.03.29 |
---|---|
django datetime Asia/Seoul LMT+8:28:00 STD Why not KST+9:00 (2) | 2021.03.17 |
SameSite=Lax set-cookie was blocked because it was not sent over a secure connection 보안이슈 (0) | 2021.02.26 |
Django ORM makemigrations과 migrate 차이 및 사용자 절차(커스텀) 적용 방법. (0) | 2021.02.26 |
DJANGO 보안의 중요성 - GPON 공격 (2) | 2021.02.16 |