[python] Django REST framework에서의 테이블 관계 설정 방법

Django REST framework은 Django 프레임워크의 확장으로, 웹 API를 쉽게 개발할 수 있도록 도와줍니다. 당신이 Django REST framework을 사용하고 있다면, 테이블 간의 관계(One-to-One, One-to-Many, Many-to-Many 등)를 적절하게 설정해야 합니다. 이 게시물에서는 Django REST framework에서 테이블 간의 관계를 설정하는 방법을 알아보겠습니다.

1. 모델 정의하기

우선, 테이블 간의 관계를 설정하기 위해서는 모델을 정의해야 합니다. Django에서는 models.py 파일에서 모델을 정의합니다. 다음은 간단한 예시입니다.

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.ForeignKey(Author, on_delete=models.CASCADE)

위 예시에서는 Author 모델과 Book 모델 사이의 One-to-Many 관계를 설정하고 있습니다.

2. 직렬화(Serialization) 설정하기

Django REST framework에서는 모델을 직렬화하여 JSON 형태로 변환해주는 Serializer 클래스를 제공합니다. 다음은 직렬화 설정 예시입니다.

from rest_framework import serializers
from .models import Author, Book

class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = '__all__'

class BookSerializer(serializers.ModelSerializer):
    author = AuthorSerializer()

    class Meta:
        model = Book
        fields = '__all__'

위 예시에서는 AuthorSerializerBookSerializer를 정의하고, BookSerializer에서 author 필드를 AuthorSerializer로 설정하고 있습니다. 이렇게 하면 관련된 모델의 내용도 함께 직렬화됩니다.

3. 뷰(View) 설정하기

다음으로는 뷰를 설정해야 합니다. Django REST framework에서는 뷰를 통해 API 요청에 대한 처리를 정의합니다. 다음은 뷰 설정 예시입니다.

from rest_framework import viewsets
from .models import Author, Book
from .serializers import AuthorSerializer, BookSerializer

class AuthorViewSet(viewsets.ModelViewSet):
    queryset = Author.objects.all()
    serializer_class = AuthorSerializer

class BookViewSet(viewsets.ModelViewSet):
    queryset = Book.objects.all()
    serializer_class = BookSerializer

위 예시에서는 AuthorViewSetBookViewSet를 정의하고, 각각의 querysetserializer_class를 설정하고 있습니다. 이렇게 설정하면 API 요청에 대한 CRUD(Create, Retrieve, Update, Delete) 기능이 자동으로 제공됩니다.

4. URL 설정하기

마지막으로 URL을 설정해야 합니다. Django REST framework에서는 URL을 통해 API 엔드포인트를 정의합니다. 다음은 URL 설정 예시입니다.

from django.urls import include, path
from rest_framework import routers
from .views import AuthorViewSet, BookViewSet

router = routers.DefaultRouter()
router.register(r'authors', AuthorViewSet)
router.register(r'books', BookViewSet)

urlpatterns = [
    path('', include(router.urls)),
]

위 예시에서는 router를 통해 AuthorViewSetBookViewSet를 등록하고, urlpatterns에 포함시킵니다. 이렇게 설정하면 /authors//books/로 접속하여 API 요청을 수행할 수 있습니다.

결론

이렇게 Django REST framework에서 테이블 간의 관계를 설정하는 방법을 알아보았습니다. 효과적인 테이블 관계 설정은 Django REST framework를 통해 웹 API를 가장 효율적으로 개발하는 데 도움을 줄 것입니다. 자세한 내용은 Django REST framework 공식 문서를 참조하시기 바랍니다.

참조: Django REST framework 공식 문서