2013-08-06 41 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)中。 –