Closed kk0in closed 3 years ago
모델에 전달하는 값은 구체적일 수록 좋습니다. 결국 데이터니까요.. 그러니 여기서 조작하시기보단 response를 건드는게 맞습니다.
Serializer가 들어오는 값을 validate-field 메소드로 검증하고, 나가는 값은 get-field 메소드로 직렬화를 수행한다는 것을 세미나 영상과 자료에서 여러 번 언급한 바가 있습니다.
response로 나가는 time 값을 strftime 따위의 메소드로 포매팅 처리 해주시면 되겠죠?
안녕하세요. 시리얼라이저 타임 필드 관련 공식 문서에 다음과 같이 나와 있는데요,
또한 저희 과제 스펙에서 세미나 시간 외 다른 타임필드마저 디폴트로 특정한 시간 형식을 맞추라는 얘기가 없어서.. setting을 건드리는 대신 해당 시리얼라이저 타임필드에만 1.format = 어쩌구 2.inputformat 어쩌구(이건 이미 해주셨어요 😃) 옵션을 걸어주면 될 것 같습니다.
@ding-young 이제 저보다 drf를 잘 아시는 분들이 나오기 시작했네요. 최고입니다..
제 답변 말고 공식문서대로 해주세요!
@Jhvictor4 @ding-young 답변주셔서 감사합니다! 그런데 @ding-young 이 주신 답변을 참고해서 아래와 같이 수정을 했는데도, 여전히 시간이 14:30:00 처럼 나옵니다 ㅜㅜ 혹시 이렇게만 고치는 것이 아닌가요..? time = serializers.TimeField(required=True, format=['%H:%M'], input_formats=['%H:%M'])
@kk0in 아 format = ['형식']에서 []을 빼보시겠어요? 저도 왜 굳이 그런지 정확히는 모르나.. (아마 인풋 포맷은 여러 개를 허용해주고 싶어서 []을 쓰도록 한 것 같고 output 형식은 단일해야할 것 같아서 그냥 '~' 이렇게 쓰나.. 하고 추측만 해봤습니다. 공식 문서 예시에도 자세히 보시면 format이랑 inputformat에 형식 적어주는 방식이 그렇게 다르더라구요 ㅜㅜㅋㅋㅋㅋㅋ)
아 다시보니 문서에도 format은 "a string" inputformats은 "list of strings"이라 적혀 있어요. 저도 요거 때문에 똑같이 적었다가 시간 날렸었어요 :)
안녕하세요. request body에서 time을 14:30 와 같은 형식으로 주어도 response에서 14:30:00 으로 나오는 문제가 해결이 안되서 질문을 드립니다.
seminar/model.py 에서는 time = models.TimeField() 와 같이 정의했고, seminar/serializer.py 에서는 time = serializers.TimeField(required=True, input_formats=['%H:%M']) 와 같이 정의했습니다.
이외에도 구글링을 통해 setting에서 TIME_INPUT_FORMATS = ('%H:%M', ) 등을 추가하는 방법을 적용해봤지만 문제 해결이 되지는 않았습니다.
제가 추측하기로는.. serminar/serializer에서 serminar 생성을 담당하는 시리얼라이저 내 create(self, validated_data) 함수에서 seminar = Seminar.objects.create(..., time=validated_data['time'], ...) 을 진행할 때, validated_data['time']는 14:30 와 같은 형식인데, 이것이 모델에 전달되면서 14:30:00으로 전환되는 것 같습니다. (실제 DB에도 이렇게 저장이 됩니다.)
일단 이러한 제 추측이 맞는지 궁금하고, 이것이 맞다면 어떻게 해결을 해야할 지 궁금합니다! model.py에서 time = models.TimeField() 에 옵션으로 포맷을 주는 방법은 구글링 해도 잘 나오지 않아서, 혹시 다른 방법이 있는지, 아니면 모델에 직접적으로 포맷을 설정하는 방법이 있는지 등에 대한 답변을 주시면 감사하겠습니다!