因此,当您使用django的inspectdb函数导入旧数据库时,它表示您需要手动清理“重新排列模型的顺序”。在django网站上的文档中,它指出“特别是,您需要重新排列模型的顺序,以便正确地订购引用其他模型的模型。”
这究竟是什么意思?如果模型A引用模型B,那么模型B应该出现在文件中的模型A之前吗?
答案 0 :(得分:3)
在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)