Как я могу разрешить или исправить Django cycli c зависимости полей модели? - PullRequest
1 голос
/ 02 апреля 2020

У меня есть дизайн базы данных, соответствующий следующему псевдокоду:

class AModel(models.Model):
    c_model_instances = models.OneToOne(CModel, ...)  # "is a" relationship

class BModel(models.Model):
    a_model_instances = models.ManyToMany(AModel, ...)  # "contains" relationship

class CModel(models.Model):
    b_model_instances = models.ManyToMany(BModel, ...)  # "contains" relationship

Верьте или нет ... этот дизайн имеет смысл с точки зрения бизнеса :) Однако, конечно, я получаю ошибка NameError: name 'CModel' is not defined при попытке перенести базу данных. Как я могу решить или исправить (с помощью другого дизайна) проблему?

1 Ответ

1 голос
/ 02 апреля 2020

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

Если вам нужно создать связь на модели который еще не был определен, вы можете использовать имя модели , а не сам объект модели.

Например:

class AModel(models.Model):
    c_model_instances = models.OneToOne(<b>'<i>django_app_name</i>.CModel'</b>, &hellip;)  # "is a" relationship

class BModel(models.Model):
    a_model_instances = models.ManyToMany(AModel, &hellip;)  # "contains" relationship

class CModel(models.Model):
    b_model_instances = models.ManyToMany(BModel, &hellip;)  # "contains" relationship

Django автоматически заменит строковые литералы ссылками на модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...