1

因此,当您使用 django 的 inspectdb 功能导入旧数据库时,它指出您需要手动清理“重新排列模型的顺序”。在 django 网站上的文档中,它声明“特别是,您需要重新排列模型的顺序,以便正确排序引用其他模型的模型。”。

这到底是什么意思?如果模型 A 引用模型 B,那么模型 B 应该出现在文件中模型 A 之前吗?

4

1 回答 1

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)
于 2013-08-06T07:04:23.800 回答