728x90
반응형
1. 문제점
부모 - 자식의 구조를 갖는 Nested된 Serializer 구조를 사용했는데, update 메서드를 Django에서 지원하지 않는다고 하면서 아래 같은 에러 메시지가 뜬다.
AssertionError: The `.update()` method does not support writable nested fields by default.
Write an explicit `.update()` method for serializer `...`, or set `read_only=True` on nested serializer fields.
2. 해결 방안
필드를 사용할 때 반드시 Model에서 역참조로 related_name 값으로 정의한 이름으로 사용해주어야 한다.
School : People = 1: N 으로 정의해놓고, 특정 SchoolSerializer에서는 people 중에 student만 처리한다는 생각으로 StudentSerializer를 만들고, SchoolSerializer에서 필드 이름을 students라고 처리하면 안된다. ModelSerializer를 사용하므로 반드시 related_name으로 정의한 이름으로 적어줘야한다.
## Serializer 사용
class StudentSerializer(serializers.ModelSerializer):
name = serializers.CharField()
number = serializers.IntergerField()
class Meta:
model = People
fields = ['name', 'number']
class SchoolSerializer(serializers.ModelSerializer):
people = StudentSerializer(many=True) #students라고 임의로 이름을 지으면 에러
address = serializers.CharField()
class Meta:
model = School
fields = ['people', 'address']
## Model 정의
class People:
... 중략
school = ForeignKey("School", related_name="people")
728x90
반응형
'Programming-[Backend] > Django' 카테고리의 다른 글
Django로 프로젝트 세팅 with DRF, mysql, viewSet, pyTest (0) | 2024.03.07 |
---|---|
reverse relationship: _set 호출 시 get_ 메서드에서 N+1 발생 (0) | 2023.10.29 |
API Throughput, health check fail: async 요청이 한 번에 많이 들어올 때 (0) | 2023.10.29 |
[TIL] Django Restframework Exception Handler 개요 (0) | 2023.04.16 |
[TIL] Django Cache 개요 (0) | 2023.04.16 |