테이블 간 관계를 맞을 수 있다!
1 : N
N : M
1 : 1
📌 Django에서 model을 통한 관계를 표시할 때 양방향으로 정의가 필요할 것 같지만, 한쪽 클래스에서만 관계를 정의하면 됨!
ForeignKey
를 사용ForeignKey
필드는 1에 정의하는 것이 아니라 N에 정의from django.db import models
# 학생
class Student(models.Model):
number = models.IntegerField("학번")
name = models.CharField("이름", max_length=20)
major = models.ForeignKey(verbose_name="주전공", to='e.Department', on_delete=models.SET_NULL, null=True)
def __str__(self):
return self.name
# 학과
class Department(models.Model):
name = models.CharField("학과명", max_length=20)
head = models.CharField("학과장", max_length=20)
def __str__(self):
return self.name
on_delete옵션은 연결된 객체가 삭제될 경우 현재 객체를 어떻게 처리할지 묻는 값
from django.db import models
# 학생
class Student(models.Model):
number = models.IntegerField("학번")
name = models.CharField("이름", max_length=20)
major = models.ForeignKey(verbose_name="주전공", to='e.Department', on_delete=models.SET_NULL, null=True)
friends = models.ManyToManyField(verbose_name="친구들", to='self', db_table='e_friendship', blank=True)
def __str__(self):
return self.name
ManyToManyField
를 이용해 쉽게 N:M 관계를 구현📌 두 테이블 모두 ManyToMany 필드를 가지고 있어서는 안됨
from django.contrib import admin
from .models import Student, Department
admin.site.register(Student)
admin.site.register(Department)
OneToOneField
로 표현from django.db import models
# 학생
class Student(models.Model):
number = models.IntegerField("학번")
name = models.CharField("이름", max_length=20)
major = models.ForeignKey(verbose_name="주전공", to='e.Department', on_delete=models.SET_NULL, null=True)
friends = models.ManyToManyField(verbose_name="친구들", to='self', db_table='e_friendship', blank=True)
card = models.OneToOneField(Student, on_delete=models.CASCADE)
def __str__(self):
return self.name
class StudentCard(models.Model):
studentCardID = models.IntegerField()
def __str__(self):
return self.studentCardID