Django에서 모델 간의 관계를 설정하는 방법과 예제를 설명하겠습니다. 모델 간의 관계를 설정하면 데이터베이스에서 테이블 간의 관계를 표현할 수 있습니다. 주요 관계 유형에는 ForeignKey
와 ManyToManyField
가 포함됩니다.
ForeignKey (일대다 관계)
ForeignKey
를 사용하여 모델 간의 일대다 관계를 설정할 수 있습니다. 예를 들어, 블로그 게시물과 저자 간의 관계를 나타내는 모델을 만들어 보겠습니다.
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Blog(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(Author, on_delete=models.CASCADE)
위의 코드에서 Blog
모델은 Author
모델을 ForeignKey
로 참조하고 있습니다. 이것은 “하나의 저자가 여러 개의 블로그 게시물을 작성할 수 있다”는 일대다 관계를 나타냅니다. on_delete
매개변수는 연결된 저자가 삭제될 때 블로그 게시물의 처리 방법을 지정합니다.
ManyToManyField (다대다 관계)
ManyToManyField
를 사용하여 모델 간의 다대다 관계를 설정할 수 있습니다. 예를 들어, 학생과 과목 간의 다대다 관계를 나타내는 모델을 만들어 보겠습니다.
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=100)
subjects = models.ManyToManyField('Subject')
class Subject(models.Model):
name = models.CharField(max_length=100)
위의 코드에서 Student
모델은 Subject
모델과 ManyToManyField
를 통해 관련되어 있습니다. 이것은 “하나의 학생이 여러 과목을 수강하고 여러 학생이 같은 과목을 수강할 수 있다”는 다대다 관계를 나타냅니다.
ForeignKey와 ManyToManyField 사용 예제
이제 ForeignKey와 ManyToManyField를 사용하여 데이터를 조회하고 조작하는 간단한 예제를 제공하겠습니다.
- ForeignKey 사용 예제:
# 블로그 게시물을 작성한 저자의 이름 조회
blog = Blog.objects.get(pk=1)
author_name = blog.author.name
이 예제에서 `Blog` 모델에서 `author` 필드를 통해 저자의 이름을 조회합니다.
- ManyToManyField 사용 예제:
# 특정 학생이 수강하는 과목 목록 조회
student = Student.objects.get(pk=1)
subjects = student.subjects.all()
이 예제에서 `Student` 모델에서 `subjects` 필드를 통해 학생이 수강하는 모든 과목을 조회합니다.
ForeignKey와 ManyToManyField는 Django 모델 간의 복잡한 관계를 표현하는 데 사용됩니다. 이러한 관계를 사용하면 데이터베이스에서 데이터를 구조화하고 쿼리할 때 더 많은 유연성을 가질 수 있습니다.