Позволяет говорят, что у меня есть два django приложения:
В приложении соревнований у меня есть модель, которая представляет раздел конкуренции:
class Division(models.Model):
competition = models.ForeignKey(Competition)
discipline = models.CharField(max_length=1, choices=DISCIPLINE_CHOICES)
age_group = models.ForeignKey(AgeGroup)
participants = models.ManyToManyField(Competitor, through='Entry')
Я хочу поместить модель Entry в приложение записей:
class Entry(models.Model):
division = models.ForeignKey('Division')
competitor = models.ForeignKey(Competitor)
withdrawn = models.BooleanField(default=False)
Как я решаю от... импорта... операторы, так, чтобы они работали? Когда я вставил операторов импорта такой как from entries.models import Entry
Я получаю модели из этих приложений, проигнорированных syncdb (потому что импорт является круговым), или когда я удаляю один или они оба, которые я получаю ошибки проверки:
Ошибка: Одна или несколько моделей не проверили: entries.entry: 'подразделение' имеет отношение с моделью Division, которая не была или установлена или абстрактна. competitions.division: 'участники' указывают m2m отношение через модель Entry, которая не была установлена
Я понимаю, почему это происходит, но я понятия не имею, как изменить это, так, чтобы это работало (не обращаясь к перемещению модели Entry в приложение соревнований, которое я действительно не хочу делать).
Кажется, я нашел ответ, который работает более последовательно :)
В документации Django по классу ForeignKey говорится:
Ссылаться на модели, определенные в другой приложение, вы можете явно указать модель с полным прикладная этикетка. Например, если Вышеуказанная модель производителя определена в другое приложение, называемое "производство", вам нужно будет использовать:
class Car(models.Model):
manufacturer = models.ForeignKey('production.Manufacturer')
Этот тип ссылок может быть полезен. при разрешении циркулярного импорта зависимости между двумя приложениями.
иногда, django.db.models.get_model
помогает работать с круговым импортом. В вашем примере попробуйте нормально импортировать Entry
и отчеканите определение FK в
Entry
до следующего:
from django.db.models import get_model
class Entry(models.Model):
division = models.ForeignKey(get_model('competitions', 'Division'))