首页 > 解决方案 > 如何解决或修复 Django 循环模型字段依赖项?

问题描述

我有一个对应于以下伪代码的数据库设计:

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当我尝试迁移数据库时,我当然会遇到错误。我该如何解决或修复(通过不同的设计)这个问题?

标签: pythondjangodatabasedjango-models

解决方案


您可以使用字符串文字,而不是指向模型的标识符,如文档中所述

如果您需要在尚未定义的模型上创建关系,则可以使用模型的名称,而不是模型对象本身。

例如:

class AModel(models.Model):
    c_model_instances = models.OneToOne('django_app_name.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

Django 将自动将字符串文字替换为对模型的引用。


推荐阅读