728x90
Django REST Framework(DRF)에서 Many-to-Many(M:N) 관계
- Book과 Author 모델이 M:N 관계에 있다고 가정
- Book 모델이 여러 Author를 가질 수 있고, 반대로 Author도 여러 Book을 가질 수 있는 상황
- 이미 작성된 author를 사용한다고 가정
# models.py
from django.db import models
class Author(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=100)
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, related_name='books')
# serializers.py
...
class BookSerializer(serializers.ModelSerializer):
authors = serializers.PrimaryKeyRelatedField(many=True, queryset=Author.objects.all())
class Meta:
model = Book
fields = ['id', 'title', 'authors']
# 유효성 검사를 마친 데이터에 대해서 추가적인 커스텀 로직 가능
def create(self, validated_data):
authors_ids = validated_data.pop('authors')
book = Book.objects.create(**validated_data)
book.authors.set(authors_ids)
return book
# JSON 예시
{
"title": "새 책",
"authors": [1, 2]
}
- PrimaryKeyRelatedField를 사용하면 클라이언트로부터 전달받은 ID에 해당하는 Author 인스턴스들을 조회하여 Book의 authors에 할당
- queryset=Author.objects.all()는 해당 필드가 어떤 모델의 인스턴스들을 참조할 것인지를 지정
참고자료
'Today_I_Learned' 카테고리의 다른 글
Shell로 BOJ VSCode Java 설정 자동화하기 (Mac 기준) (1) | 2024.01.17 |
---|---|
Playwright로 Colab에서 연합뉴스 크롤링하기 (1) | 2023.12.21 |
AWS API Gateway로 DynamoDB PutItem 메서드 구현 (23.10.13) (1) | 2023.10.14 |
multiprocessing를 통한 병렬 처리 파이썬 코드 예제 (0) | 2023.09.30 |
네이버 증권 ETF 시세 정보 및 항목 리스트 API 조회 파이썬 코드 예제 (0) | 2023.09.30 |