python - 如何解决或修复 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
当我尝试迁移数据库时,我当然会遇到错误。我该如何解决或修复(通过不同的设计)这个问题?
解决方案
您可以使用字符串文字,而不是指向模型的标识符,如文档中所述:
如果您需要在尚未定义的模型上创建关系,则可以使用模型的名称,而不是模型对象本身。
例如:
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 将自动将字符串文字替换为对模型的引用。
推荐阅读
- java - JavaFX - 引发异常时初始化相互冲突
- css - 悬停时出现问题 mat-form-field 轮廓背景颜色
- python - 当改变 librosa.load 的采样率时,如何改变 librosa.onset.onset_strength?
- c# - 如何实现两个具有不同行为的相同对象?
- python - 在 PyCharm 下调试 wxPython 应用程序会导致每个未处理的异常终止
- reactjs - 立即更新状态的正确方法是什么?
- typescript - 打字稿通过配置忽略特定文件中的错误
- c++ - 由于错误的指针算法,memcpy 中的代码崩溃
- node.js - Nodejs - 图像缓冲区大小比原始文件大得多
- php - 无法通过 cURL 连接和更新股票