백엔드

django - OneToMany realation - foreignKey

studying develop 2023. 1. 15. 22:36

https://docs.djangoproject.com/en/4.1/topics/db/examples/many_to_one/

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

 

디비 구성을 하다보면 한개의 모델에 여러개의 다른 모델을 연결하고 싶을때가 있다.

 

결국 모델간에 1:N 대응을 만드는 일이다.

코드로는 아래와 같다.

from django.db import models

class Reporter(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    email = models.EmailField()

    def __str__(self):
        return "%s %s" % (self.first_name, self.last_name)

class Article(models.Model):
    headline = models.CharField(max_length=100)
    pub_date = models.DateField()
    reporter = models.ForeignKey(Reporter, on_delete=models.CASCADE)

    def __str__(self):
        return self.headline

    class Meta:
        ordering = ['headline']

 

말로 풀어서 말해보면,

한명의 기자는 여러개의 기사를 가질 수 있다. 

즉, 한명의 기자는 기사를 0개 가질수도 있고, 1개 가질수도 있고, 여러개 가질수도 있다는 말이다.

 

아래 예시를 보면 Article이 N개에 해당할때 Article안에 ForeignKey로 Reporter를 써준다. (개인적으로는 이 부분이 가장 햇갈렸다, ForeignKey를 어디에 써줄지, 결국 장고에서 테이블에 접근하는 코드를 구현한다고 생각하면, 떠오르기 더 쉽다.)

우리는 결국 디비 테이블에 로우를 채우는 것이였다.