因此,当您使用 django 的 inspectdb 功能导入旧数据库时,它指出您需要手动清理“重新排列模型的顺序”。在 django 网站上的文档中,它声明“特别是,您需要重新排列模型的顺序,以便正确排序引用其他模型的模型。”。
这到底是什么意思?如果模型 A 引用模型 B,那么模型 B 应该出现在文件中模型 A 之前吗?
因此,当您使用 django 的 inspectdb 功能导入旧数据库时,它指出您需要手动清理“重新排列模型的顺序”。在 django 网站上的文档中,它声明“特别是,您需要重新排列模型的顺序,以便正确排序引用其他模型的模型。”。
这到底是什么意思?如果模型 A 引用模型 B,那么模型 B 应该出现在文件中模型 A 之前吗?
在 django 网站上的文档中,它声明“特别是,您需要重新排列模型的顺序,以便正确排序引用其他模型的模型。”
这到底是什么意思?
一般在Python中,要引用任何名字,都需要先定义;因为只有这样它才会被映射;所以这将导致错误:
print(hello)
hello = 'world'
同样,在 中models.py
,当您在任何关系中引用另一个模型类时;您必须确保在引用该类之前声明该类 - 或者您需要引用类名。由于检查无法保证创建模型的顺序,因此您会收到警告。它旨在防止这种情况,这将导致错误:
class A(models.Model):
foo = models.ForeignKey(B)
class B(models.Model):
name = models.CharField(max_length=200)
要修复它,您可以B
在之前声明A
:
class B(models.Model):
name = models.CharField(max_length=200)
class A(models.Model):
foo = models.ForeignKey(B)
或者使用字符串代替名称:
class A(models.Model):
foo = models.ForeignKey('B')
class B(models.Model):
name = models.CharField(max_length=200)