Django ошибка CircularDependencyError
Есть две модели
файл Prices/models.py
import Books.models import Books
class Prices(models.Model):
book_id = models.ForeginKey(Books, on_delete=models.DO_NOTHING)
# ... other fields
файл Books/models.py
import Prices.models as pr_model
class Books(models.Models):
price_id = models.ForeignKey('Prices.Prices', on_delete=models.DO_NOTHING)
# ... other field
def save(self, *args, **kwargs):
price = pr_model.Prices.objects.all()
# ... some logic and saving price object or create
При таком импорте пакетов получаю ошибку, что логично
django.db.migrations.exceptions.CircularDependencyError: Books.0001_initial, Prices.0001_initial
То есть, при начальной миграции обеих django приложений, будет выводится ошибка указанная выше. Однако если закоментить в Books импорт и после чего раскомментировать и снова мигрировать данные, то ошибки не будет.
Подскажите, это может повлечь за собой проблемы в дальнейшем ? Может есть более изящный способ сделать такие манипуляции и не нарушать импорт пакетов?
Ответы (1 шт):
Если джанго говорит что цикличный вызов это не хорошо, значит это не хорошо. Ваша модель book_id ссылается на модель Books, в вашем случае лучшим решением будет добавить related_name для модели book_id, а из Book/models.py вообще убрать импорт Price/models.py
Вы можете реализовать все вот так:
import Books.models import Books
class Prices(models.Model):
book_id = models.ForeginKey(Books, related_name'related_book' on_delete=models.DO_NOTHING)
В дальнейшем Вы можете взаимодействовать со связанными моделями таким образом:
В поле Price.book_id будет храниться модель из класса Books, а для модели Books можно использовать такую конструкцию: books.related_book.all() - Это вернет все модели которые будут ссылаться на конкретную модель.