2011-09-12 1 views
3

큰 Django 응용 프로그램을 빌드하고 있으며 파일 구조별로 데이터 모델을 분할하려고합니다. 그러나이를 수행하려고 시도 할 때 실행 중입니다. 더 복잡한 모델 중 일부에 대한 순환 종속성 문제 책은 장르에 따라 달라집니다 장르, 책에 따라 내가 어디서든 책을 가져올 때, 그것은 원형 모델 종속성 체인을 시작할 것 때문에Java 스타일 파일 구조의 Django 모델

class Book(models.Model): 
    title = models.CharField(max_length=35) 
    author = models.ForeignKey(Author) 
    genre = models.ForeignKey(Genre) 

class Genre(models.Model): 
    name = models.CharField(max_length=20) 
    sample_book = models.ForeignKey(Book) 

class Author(models.Model): 
    name = models.CharField(max_length=60) 
    preferred_genre = models.ForeignKey(Genre) 

:

예를 들어, 나는 모든 별도의 파일에서 세 가지 모델을 가지고 각 파일은 다른 파일에서 모델을 가져 오기 때문에 어떻게 이것을 피할 수 있습니까? 이것은 매우 빠르게 커질 수있는 프로젝트이므로 모든 모델을 하나의 파일로 묶고 싶지는 않습니다.

+1

귀하의 질문은 그것은 너무 솔루션을이 하나 http://stackoverflow.com/questions/895454/django-app-dependency-cycle 유사하다. – codecool

+0

@codecool : 고마워! 그게 내 질문에 완벽하게 대답 해! – SPoage

답변

2

또한 문자열로 모델의 이름을 지정할 수 있습니다

preferred_genre = models.ForeignKey("Genre") 
+0

아하! 고맙습니다. 또한 검색에서 찾지 못한 스레드를 가리키는 codecool 덕택입니다. – SPoage

0

나는 그 디자인 문제보다는 장고 문제 같아요.

장르에 장부에 대한 참조가 없어야합니다. 그렇지 않으면 사용중인 언어/프레임 워크에 관계없이 순환 참조를 만듭니다.

sample_book은 애플리케이션 기능을위한 것 같습니다. 나는 당신이 선택한 견본 책자를 보관할 법인을 만들 것을 제안 할 것이다.

견본 책자가 모든 책의 무작위 책 일 경우 또는 책을 반환하는 다른 곳에서 사용할 수 있습니다.

+0

이것은 단순한 예입니다. 실제 코드는 불행히도 기밀이므로 공유 할 수는 없지만 실제 프로젝트는 이보다 훨씬 복잡합니다. sample_book의 특정 예에서 정확할 수도 있지만 실제로는 예제의 핵심은 아닙니다. 나는 단지 참조 용으로 비슷한 문제를 전하려고 애썼다. – SPoage