관리 메뉴

Storage Gonie

Django (22*) Like 모델 추가, Image, Comment 모델에 ForeignKey 필드추가 본문

웹개발/인스타 클론 (1) Django

Django (22*) Like 모델 추가, Image, Comment 모델에 ForeignKey 필드추가

Storage Gonie 2019. 6. 28. 16:28
반응형

아래의 작업은 images앱의 models.py에서 이뤄진다.

 

# images 앱에 Like 모델 추가

from ..users import models as user_models


class Like(TimeStampedModel):

    """ Like Model """

    creator = models.ForeignKey(user_models.User, null=True, on_delete=models.CASCADE)
    image = models.ForeignKey(Image, null=True, on_delete=models.CASCADE)

 

# Image 모델에 ForeignKey로 creator 필드 추가

class Image(TimeStampedModel):

    """ Image Model """

    file = models.ImageField()                   # 이미지파일
    location = models.CharField(max_length=140)  # 촬영한 위치
    caption = models.TextField()                 # 이미지에 대한 설명
    creator = models.ForeignKey(user_models.User, null=True, on_delete=models.CASCADE)

 

# Comment 모델에 ForeignKey로 creator, image 필드 추가

class Comment(TimeStampedModel):

    """ Comment Model """

    message = models.TextField()                 # 댓글 텍스트
    creator = models.ForeignKey(user_models.User, null=True, on_delete=models.CASCADE)
    image = models.ForeignKey(Image, null=True, on_delete=models.CASCADE)

 

# DB에 반영

python manage.py makemigrations
python manage.py migrate

 

# 위 과정에서 에러가 발생했던 부분

1) You are trying to add a non-nullable field 'creator' to image without a default
- 이미 데이터가 존재하는 테이블이기 때문에 null=True 속성을 넣어줘야 한다는 의미.
- 위의 ForeignKey에 이 속성이 들어가 있는 이유이다.

 

2) TypeError: __init__() missing 1 required positional argument: 'on_delete'
https://gomguard.tistory.com/101

- Django 2.0 버전 이상부터는 many to one 관계를 위해 ForeignKey를 사용할 때 on_delete=models.CASCADE 속성을
   넣어줘야 한다.
- 위의 ForeignKey에 이 속성이 들어가 있는 이유이다.

반응형
Comments