터칭 데이터

장고(Django) ModelSerializer 본문

장고 (Django)

장고(Django) ModelSerializer

터칭 데이터 2023. 11. 4. 17:05

 

 

Serializer를 매우 간단하게 만들기

 

 

 

QuestionSerializer가 serializers에서 Serializer대신 ModelSerializer를 상속 받도록 해줍니다.

 

필드의 정의와 create, update모두 지우고 class Meta를 작성합니다.

 

model에 사용할 모델 Question을

fields에는 Question의 필드들을 선언합니다.

 

 

갑자기 등장한 Meta 클래스는 뭐죠?

 

클래스 안에 Meta 라는 이름의 클래스를 선언하는 것의 장고 만의 약속입니다. 클래스 안에 클래스를 선언하는 단순한 문법이며, 클래스 변수 문법을 통해 이해할 수 있습니다. 파이썬 고급 문법 중에 metaclass 문법와는 관련이 없습니다.

장고는 모델 클래스나 ModelForm 클래스에 대한 메타정보(설정)를 저장할 방법으로서 클래스 문법을 사용한 것 뿐입니다.

 

출처: 인프런 답변

 

 

 

장고 쉘에서도 확인해보기

 

>>> from polls_api.serializers import QuestionSerializer
>>> print(QuestionSerializer())
QuestionSerializer():
    id = IntegerField(read_only=True)
    question_text = CharField(max_length=200)
    pub_date = DateTimeField(read_only=True)

 

우리가 수정한 Questionserializer를 Questionserializer()로 객체화 한 뒤 이를 print 합니다.

id가 read_only=True 인 것은 알겠는데 pub_date가 알아서 read_only=True되어 있는 것이 의문인 분들이 계실 수도 있는데 이는 우리가 처음 Django 학습을 진행할 때 모델에서 pub_date 필드를 auto_now_add=True로 설정한 것을 Serializer가 센스있게 알아 듣고 처리해줬기 때문입니다.

 

 

 

 

 

 

Create() 잘 되나 확인하기

 

>>> data = {'question_text': '모델시리얼라이저로 만들어 보았습니다.'}
>>> serializer = QuestionSerializer(data=data)
>>> serializer.is_valid()
True
>>> serializer.save()
<Question: NEW!!! 제목: 모델시리얼라이저로 만들어 보았습니다., 날짜: 2023-11-04 08:02:56.983031+00:00>

 

정상적으로 create가 진행됩니다.