Модели Django: взаимные ссылки между двумя классами и невозможность использования форвардной декларации в python
Я определил две модели, каждая из которых ссылается на другую:
class User(models.Model):
# ...
loves = models.ManyToManyField(Article, related_name='loved_by')
class Article(models.Model):
# ...
author = models.ForeignKey(User)
Вы видите, проблема заключается в том, что оба класса ссылаются друг на друга. Независимо от того, в каком порядке эти два класса реализованы, python всегда вызывает исключение NameError
, жалуясь, что один класс не определен.
Ответы
Ответ 1
Вы можете найти решение в docs:
Если вам нужно создать отношение к модели, которая еще не определена, вы можете использовать имя модели, а не сам объект модели:
class Car(models.Model):
manufacturer = models.ForeignKey('Manufacturer')
# ...
class Manufacturer(models.Model):
# ...