[파이썬][Django] 모델 간의 관계 설정 (ForeignKey, ManyToMany 등) 방법과 예제

Django에서 모델 간의 관계를 설정하는 방법과 예제를 설명하겠습니다. 모델 간의 관계를 설정하면 데이터베이스에서 테이블 간의 관계를 표현할 수 있습니다. 주요 관계 유형에는 ForeignKeyManyToManyField가 포함됩니다.

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를 사용하여 데이터를 조회하고 조작하는 간단한 예제를 제공하겠습니다.

  1. ForeignKey 사용 예제:
# 블로그 게시물을 작성한 저자의 이름 조회
    blog = Blog.objects.get(pk=1)
    author_name = blog.author.name
이 예제에서 `Blog` 모델에서 `author` 필드를 통해 저자의 이름을 조회합니다.
  1. ManyToManyField 사용 예제:
# 특정 학생이 수강하는 과목 목록 조회
    student = Student.objects.get(pk=1)
    subjects = student.subjects.all()
이 예제에서 `Student` 모델에서 `subjects` 필드를 통해 학생이 수강하는 모든 과목을 조회합니다.

ForeignKey와 ManyToManyField는 Django 모델 간의 복잡한 관계를 표현하는 데 사용됩니다. 이러한 관계를 사용하면 데이터베이스에서 데이터를 구조화하고 쿼리할 때 더 많은 유연성을 가질 수 있습니다.