将旧数据库导入django

时间:2013-08-06 06:54:37

标签: django django-models

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

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

1 个答案:

答案 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)