본문 바로가기
코딩공부

Django ForeignKey / TIL_221006

by Dong_Devlog 2022. 10. 6.

ForeignKey에 대한 이해

 

아래와 같이 models.py에서 2개의 class를 생성해주면 2개의 테이블이 생성되어 입력값들을 저장하게 된다.

UserModel에는 AbstractUser를 사용했기 때문에 기본적으로 장고에서 제공하는 username, password 등의 필드를 받게 되고 nickname, bio 등의 필드를 추가하여 사용할 수 있게 된다.

class UserModel(AbstractUser):

    class Meta:
        db_table = "user"
   
    nickname = models.TextField(max_length=16, null=True, default='')
    bio = models.CharField(max_length=500, blank=True, null=True)
    user_images = models.ImageField(upload_to="images", blank=True, ull=True)
    follow = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='followee', null=True)

 

class Post는 db_table이 "post"이기 때문에 post라는 테이블을 새롭게 생성하게 된다.

여기서 nickname은 ForeignKey를 사용하여 UserModel에 있는 필드값들을 받아서 사용할 수 있게 된다.

class Post(models.Model):

    class Meta:
        db_table = "post"
        
    title = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
    body = models.TextField()
    nickname = models.ForeignKey(UserModel, on_delete=models.CASCADE)

 

아래는 post 테이블의 필드값인데 nickname_id에 User 테이블의 id값(int 번호로)으로 저장된다.

로그인 한 뒤에 여러개의 post를 작성하면 id 값은 1~ 로 생성되지만 nickname_id 값은 user 테이블의 id 값으로 저장되게 된다. 그러므로 user 테이블의 필드를 불러서 사용할 수 있게 된다.

댓글