게시판 만들기
프로젝트 초기셋팅을 완료후에 드디어 models.py를 작성하였다.
makemigrations를 진행하는 과정에서 ImportError
가 발생하였다.....
지금까지 2~3번의 프로젝트를 진행하면서, 접해보지 못한 importerror였다.
(most likely due to a circular import)
라고 되어있는 부분을 보아,
users app의 Like class와
board app의 Post, Comment class가
서로가 서로를 ForienKey로 참조하고 있기 때문에 무한으로 import를 하게되서 발생한 것으로 보여졌다.
구글링한 결과, 이와 같은
ImportError는 Python typing
이나 django model
에서 주로 발생한다고 한다.
그래서,
from board.models import Post, Comment
import 부분을 제거하고,
post = models.Foreignkey('Post', on_delete=models.CASCADE)
👇 변경 후 👇
post = models.ForeignKey('board.Post', on_delete=models.CASCADE)
로 class명
만 작성하는 대신, app명.class명
으로 작성한다.
무한의 Import 굴레에서 벗어나게 되었다....ㅠ
< 👇 수정 전 👇 >
# users - models.py
from django.db import models
from board.models import Post, Comment
from core.models import TimeStampModel
class User(TimeStampModel):
name = models.CharField(max_length=100)
phone_number = models.CharField(max_length=100)
profile_image_url = models.ImageField(max_length=200)
description = models.TextField()
kakao_id = models.IntegerField()
email = models.CharField(max_length=500)
class Meta:
db_table = 'users'
class Like(models.Model):
isLiked = models.BooleanField()
user = models.ForeignKey('User', on_delete=models.CASCADE)
post = models.ForeignKey('Post', on_delete=models.CASCADE)
comment = models.ForeignKey('Comment', on_delete=models.CASCADE)
class Meta:
db_table = 'likes'
< 👇 수정 후 👇 >
# users - models.py
from django.db import models
from core.models import TimeStampModel
class User(TimeStampModel):
name = models.CharField(max_length=100)
phone_number = models.CharField(max_length=100)
profile_image_url = models.ImageField(max_length=200)
description = models.TextField()
kakao_id = models.IntegerField()
email = models.CharField(max_length=500)
class Meta:
db_table = 'users'
class Like(models.Model):
isLiked = models.BooleanField()
user = models.ForeignKey('User', on_delete=models.CASCADE)
post = models.ForeignKey('board.Post', on_delete=models.CASCADE)
comment = models.ForeignKey('board.Comment', on_delete=models.CASCADE)
class Meta:
db_table = 'likes'