1. drf - serializer 알아보기
문제점
view에서 serializer 상태 확인하기
시도해 본 것들
print(serializer)해보기
user = get_object_or_404(User, id=id)
serializer = UserProfileEditSerializer(user, data=request.data)
# request.data
UserProfileEditSerializer(<User: sm990303@naver.com>, data=<QueryDict:
{'password': ['1234'], 'nickname': ['test'], 'identify': ['1234']}>):
# user
identify = CharField(label='아이디', read_only=True)
nickname = CharField(allow_null=True, label='닉네임', max_length=10, required=False)
profile_img = ImageField(allow_null=True, label='프로필 사진', max_length=100, required=False)
fav_alcohol = ChoiceField(allow_blank=True, allow_null=True, choices=[('SOJU', '소주'), ('BEER', '맥주'), ('WINE', '와인'), ('LIQUOR', '양주'), ('TAKJU', '탁주'), ('ETC', '기타'), ('NO', '응답하지 않음')], label='주종', required=False)
amo_alcohol = ChoiceField(allow_blank=True, allow_null=True, choices=(('BABY', '알쓰'), ('CHOBO', '술찌'), ('JUNGSU', '애주가'), ('GOSU', '술 꾼'), ('GOD', '디오니소스')), label='주량', required=False)
password = CharField(label='비밀번호', max_length=128, write_only=True)
request.data와 serializer에서 선언된 model의 fields가 출력된다.
print(dir(serializer))해보기
['Meta', '__class__', '__class_getitem__', '__deepcopy__', '__delattr__', '__dict__', '__dir__',
'__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__',
'__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_args', '_context', '_creation_counter',
'_declared_fields', '_get_model_fields', '_kwargs', '_read_only_defaults', '_readable_fields',
'_writable_fields', 'allow_null', 'bind', 'build_field', 'build_nested_field', 'build_property_field',
'build_relational_field', 'build_standard_field', 'build_unknown_field', 'build_url_field',
'context', 'create', 'data', 'default', 'default_empty_html', 'default_error_messages',
'default_validators', 'error_messages', 'errors', 'fail', 'field_name', 'fields', 'get_attribute',
'get_default', 'get_default_field_names', 'get_extra_kwargs', 'get_field_names', 'get_fields',
'get_initial', 'get_unique_for_date_validators', 'get_unique_together_validators', 'get_uniqueness_extra_kwargs',
'get_validators', 'get_value', 'help_text', 'include_extra_kwargs', 'initial', 'initial_data',
'instance', 'is_valid', 'label', 'many_init', 'parent', 'partial', 'read_only', 'required', 'root',
'run_validation', 'run_validators', 'save', 'serializer_choice_field', 'serializer_field_mapping',
'serializer_related_field', 'serializer_related_to_field', 'serializer_url_field', 'source',
'style', 'to_internal_value', 'to_representation', 'update', 'url_field_name', 'validate',
'validate_empty_values', 'validated_data', 'validators', 'write_only']
dir을 한 번 체크해 봤는데 잘 찍혔다.
serializer.validators 확인해 보기
[]
공백이 나왔다.
공식문서 찾아보기
https://www.django-rest-framework.org/api-guide/validators/
serializer에 validators 추가
validators = [
UniqueTogetherValidator(queryset=User.objects.all(), fields=["identify"])
]
출력 결과
[<UniqueTogetherValidator(queryset=<QuerySet [<User: >, <User: sm990303@naver.com>,
<User: sm990303@naver.com>, <User: sm990303@naver.com>, <User: sm990303@naver.com>,
<User: sm990303@naver.com>, <User: sm990303@naver.com>, <User: sm990303@naver.com>]>,
fields=['identify'])>]
알게 된 점
알아보면서 vaildators를 확인하는 것은 성공했지만, 정확한 의미가 무엇인지는 아직 이해하지 못했다.
저번의 save(), update, create만큼 뭔가 이해된 기분은 아니지만, validators를 serializer에서 사용하기 시작하면 도움이 될 것 같다.
dir()을 활용해서 사용 가능 함수를 확인하고, 공식문서에서 찾아보는 경험을 할 수 있었다.
'개발일지 > TIL' 카테고리의 다른 글
TIL 23-05-18 프로그래머스 - 비밀지도 (0) | 2023.05.18 |
---|---|
TIL 23-05-17 백준 알고리즘 - 암호, 반올림 (0) | 2023.05.17 |
TIL 23-05-15 drf 팀 프로젝트 - KPT회고 (0) | 2023.05.15 |
TIL 23-05-14 drf 팀 프로젝트 - git rebase squash (0) | 2023.05.14 |
TIL 23-05-13 drf 팀 프로젝트 - 프론트에서 이미지 보내기 (0) | 2023.05.13 |