Модели Django в файловой структуре в стиле Java - PullRequest
3 голосов
/ 12 сентября 2011

Я создаю большое приложение 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)

Так как Book зависит от жанра, а жанр зависит от книги, когда я импортирую Book где угодно, он запускает цепочку циклических зависимостей модели, поскольку каждый файл импортирует модель из других файлов. Как я могу избежать этого? Это проект, который очень быстро разрастется, поэтому я не хочу просто объединять все модели в один файл.

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

Вы также можете указать название модели в виде строки:

preferred_genre = models.ForeignKey("Genre")
0 голосов
/ 12 сентября 2011

Я думаю, что это проблема дизайна, а не проблема django.

Ваш жанр не должен иметь ссылку на книгу. В противном случае вы создадите циклические ссылки независимо от того, какой язык / рамки вы используете.

Примерная книга, кажется, предназначена для функции приложения. Я бы предложил создать объект для хранения выбранных вами образцов книг.

Или, если образцы книг - это случайная книга из всех Книг, вы могли бы просто иметь функцию где-нибудь еще, которая возвращает книгу.

...