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 요청이 한 번에 많이 들어올 때 (1) | 2023.10.29 | 
| [TIL] Django Restframework Exception Handler 개요 (0) | 2023.04.16 | 
| [TIL] Django Cache 개요 (0) | 2023.04.16 |