2016-09-27 27 views
0

沒有屬性這裏是我的模型UUIDField有uuid4

from django.contrib.contenttypes.fields import GenericForeignKey 
from django.contrib.contenttypes.models import ContentType 
import uuid 

class PiO(models.Model): 
    uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # surrogate 
    person = models.ForeignKey(Person, on_delete=models.PROTECT, max_length=25, blank=True) 
    content_type = models.ForeignKey(ContentType, on_delete=models.PROTECT) # for the various organization types 
    object_id = models.UUIDField(primary_key=False, default=uuid.uuid4, editable=False) # the uuid of the specific org 
    content_object = GenericForeignKey('content_type', 'object_id') 

這是我回溯

AttributeError: 'UUIDField' object has no attribute 'uuid4'. 

注意這是專門引用OBJECT_ID場,的UUID(PK)字段。作爲一項測試,我評論了object_id字段。我做了而不是因爲沒有object_id字段而得到一個錯誤,並且檢查發生了12行的新錯誤。

我用Google搜索精確短語,並得到

No results found for "AttributeError: 'UUIDField' object has no attribute 'uuid4'". 

我所做的看起來符合the docs給我。

我錯過了什麼?泛型外鍵和/或內容類型的存在與它有什麼關係?

回答

5

問題是您的型號字段uuid與模塊uuid相沖突。

一種選擇是重命名模型字段,例如:

class PiO(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid4, editable=False) 
    ... 

另一種選擇是將進口改爲from uuid import uuid4,並更新默認使用uuid4而不是uuid.uuid4

from uuid import uuid4 

class PiO(models.Model): 
    uuid = models.UUIDField(primary_key=True, default=uuid4, editable=False) # surrogate 
    ... 
    object_id = models.UUIDField(primary_key=False, default=uuid4, editable=False) # the uuid of the specific org 
+0

謝謝。對於Sayse提出的幫助我的初步評論,也許他花了一些分數;-)。只是一些事情。我將不得不回頭重構我的代碼,因爲我命名了很多pk字段'uuid'。不是世界末日。另外,當我用id替換uuid作爲字段名稱時,它變成了藍色(與我的Sublime主題中的'class'相同的顏色),這是'紅旗'。請參閱https://docs.djangoproject.com/en/1.10/topics/db/models/#automatic-primary-key-fields和http://stackoverflow.com/questions/77552/id-is-a-bad- python中的變量名稱。所以我決定只是將它們全部更改爲uuid_ –

+0

UPDATE,對於有此問題的任何人。雖然Python允許uuid_,但Django不會,所以你必須找出另一個名字。 –

+0

Django允許模型字段帶有前導下劃線,例如'_uuid',但不是尾部下劃線,例如'uuid_'。話雖如此,我不明白爲什麼你必須找出另一個名字。如果您更改導入,您可以保留'uuid'。或者,你可以使用'id'。 Django使用'id'作爲自動生成的主鍵,所以你也可以使用它。我意識到你的編輯器會顯示警告,但在這種情況下可以忽略。 – Alasdair

相關問題