GET api/v1/seminar/?name에서 request body와 values() 사용
Opened this issue · 6 comments
{
"id": Seminar id,
"name": Seminar name,
"instructors": [
{ ......
GET api/v1/seminar/?name
이 부분을 구현하고 있는데요! filter 와 order_by를 적용하는 경우에는 Seminar Object를 QuerySet으로 가지고 있어서 문제가 발생하지 않았습니다. ( <QuerySet [<Seminar: Seminar object (9)>]>)
그런데 time, count 같은 값을 넘겨주지 않으려고 .values('id', 'name')을 덧붙이게 되면 dict로 바뀌면서 error
가 발생합니다. ( <QuerySet [{'id': 9, 'name': 'backend'}]> )
KeyError: "Got KeyError when attempting to get a value for field
time
on serializerSeminarSerializer
.\nThe serializer field might be named incorrectly and not match any attribute or key on thedict
instance.\nOriginal exception text was: 'time'."
serializers.py 내부에는 time = serializers.TimeField(input_formats=['%H:%M'])
으로 선언되어 있는데, 이를 어떻게 해결해야 할지 아무리 찾아봐도 잘 모르겠습니다... object가 아니라 dict type을 넘겨주면서 기존에 serializer 에서 정의된 time이 문제가 되는 것 같은데, 혹시 .values를 사용하는 방법이 잘못된 접근인걸까요? 아니면 time의 정의를 잘못한건가요..?
일단 values()를 활용해보려 하신 것은 좋은데, ‘time, count 같은 값을 넘겨주지 않으려고’에서(빠진 내용이지만 SeminarSerializer에 안 넘기려고 라는 것이죠?), 애초에 잘 이해가 안 되는 측면이 있습니다. 지금 저 코드가 어디까지 수행한 어떤 상황이고, 왜 안 넘겨주어야 한다고 생각하셨는지 알면 좀 더 잘 답변해드릴 수 있을 것 같은데요. 로직은 다 처리하고 response body를 만들기 위해 serializer를 쓰는 상황이면, 일반적으로 ModelSerializer가 내부적으로 정의하지 않은 fields는, serialize할 model 객체를 넘겨줄 때 알아서 걸러서 data로 만들어주는 것을 사실 익히 접하셨을 것입니다. 그러니까 굳이 values()로 수동으로 걸러줄 필요가 없습니다. 일반적으로 그냥 model 객체를 넘겨야 합니다.
저렇게 dict로 만들고 나니까, 에러 메시지에 써있듯 만들어두신 SeminarSerializer 내에 time이라는 field가 있는데 이걸 가져올 수가 없다고 하면서 에러가 나는 상황 같네요.
글구 label 달아주세용
아하! 그렇군요..! values로 걸러줄 필요가 없었네요.. 감사합니당
그러면 SeminarSerializer에서 id랑 name만 body로 보내려면 어떻게 해야하는건가요..? 새로운 serializer를 정의해서 id랑 name만 넘겨줘야 하는건가요?😭