2013-02-23 40 views
8

我有一個CharField領域的典範與uuid4的默認值:南方遷移錯誤:名稱「UUID」沒有定義

f = models.CharField(default=uuid4, max_length=36, unique=True, blank=True) 

這也是造成以下錯誤:

Cannot successfully create field 'f' for model 'm': name 'UUID' is not defined.

運行遷移命令的

!我能解決這個問題嗎?到目前爲止我嘗試:

  • 到模塊中定義一個「包裹函數」爲UUID(即:DEF getUUID())
  • 通過重寫模型構造
  • 設置「F」的默認值

...但問題仍然存在:(

PS我知道我可以向南指示自定義字段,但我不使用自定義字段在我看來:P。

+0

首先,該錯誤不符合你發佈的代碼,如'uuid4'是不一樣'UUID'。其次,您是否已經在模塊中定義或導入了這些名稱? – 2013-02-23 13:58:41

+0

uuid4來自uuid模塊! (它在南部以大寫的方式打印)...並且是的,我已經爲我的模型導入了所有必需的依賴關係(它在django中工作正常) – daveoncode 2013-02-23 14:01:40

+0

找到名爲'UUID'的變量並且它是值。無法從上面的代碼中調試UUID。如果有任何回溯,張貼。 – 2013-02-23 14:37:42

回答

10

我解決了定義該在我的模型的模塊下面的輔助函數:

from uuid import uuid4 

def generateUUID(): 
    return str(uuid4()) 

則:

f = models.CharField(default=generateUUID, max_length=36, unique=True, editable=False) 

南部將生成像生成的UUID遷移文件(migrations.0001_initial):

default='5c88ff72-def3-4842-8d48-a75bb3240bb5' 

這是很不愉快......因爲這個字符串是「靜態的」,相反它必須使用helper函數動態創建......無論如何,在django的世界中似乎按預期工作......我添加了一些將數據線插入數據庫,併爲每個數據庫生成一個新的UUID。然後,我通過向我的模型添加了幾個字段來嘗試我的第一個模式遷移,並按預期將它們添加到數據庫表中。

4

您也可以在遷移導入UUID:

from uuid import UUID 
+0

好得多,謝謝 – Andrei 2014-09-22 15:12:14

+0

作爲一個缺點,你必須在每次遷移 – Andrei 2014-09-22 17:48:09