프로그래밍/Django & Flask

[Django] ImportError: cannot import name 'Class' from 'app.models' (클래스 간 circular dependency)

대인보우 2020. 11. 30. 19:50
반응형

User 클래스에 Post 클래스 기반 M:N 관계를 설정하려고 했는데 다음과 같은 에러가 발생했다.

 ImportError: cannot import ~

찾아보니 해당 에러는 클래스간 circular dependency가 발생했기 때문이라고 한다.

 

post/models.py

from member.models import MyUser
class Post(models.Model):
    # 글아이디는 자동생성
    posting_writer = models.ForeignKey(MyUser, on_delete=models.CASCADE)

member/models.py

from post.models import Post
class MyUser(AbstractUser):
    bookmark = models.ManyToManyField(Post)

이처럼 두 App의 클래스가 서로를 참조하려고 해서 발생하는 에러다.

A가 B를 참조하고,, B가 C를 참조하고,, 다시 C가 A를 참조해서 우선순위를 찾을 수가 없을 때 발생하는 에러!

 

다음과 같이 수정해준다.

class MyUser(AbstractUser):
    bookmark = models.ManyToManyField('post.Post')

import 한 걸 지워주고 'app_name.class_name'으로 정의해주면 해결됨

반응형