2013-08-06 39 views
1

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

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

+0

您能提供指向您所指向的文档的链接吗? – jsalonen

回答

3

In the documentation on the django website it states "In particular, you’ll need to rearrange models’ order, so that models that refer to other models are ordered properly."

What exactly does this mean?

在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) 

要解决它,你可以声明BA

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) 
+0

在上例中,如果使用字符串而不是名称,它是否仍然正确引用它? – dl8

+0

是的。此功能位于文档中,但位于[字段参考章节](https://docs.djangoproject.com/en/1.5/ref/models/fields/#lazy-relationships)中。 –