2016-02-17 31 views
0
File "/home/malikarumi/Projects/cannon/local/lib/python2.7/site-packages/django/db/models/fields/__init__.py", line 2390, in get_db_prep_value 
value = uuid.UUID(value) 
File "/usr/lib/python2.7/uuid.py", line 134, in __init__ 
raise ValueError('badly formed hexadecimal UUID string') 
ValueError: Problem installing fixture '/home/malikarumi/Projects/cannon/jamf/essell/fixtures/test22byhand.json': badly formed hexadecimal UUID string 

我發現下面的鏈接至今:
https://github.com/dcramer/django-uuidfield/issues/40Django fixture中形成的十六進制uuid字符串錯誤; JSON UUID轉換失敗問題

https://github.com/dcramer/django-uuidfield/commit/caae1bc4e45445a06dd11bb22da6a9f07395f78a

Django UUIDField modelfield causes error in Django admin: badly formed hexadecimal UUID string

Django Primary Key: badly formed hexadecimal UUID string

我算我的uuidfield值。它是len = 36,因爲它有破折號。至少我能看到的字符串表示就是這樣。所以我用沒有破折號的相同字母數字代替了它,正如bug修復測試所暗示的那樣,但我仍然得到了相同的結果。

我檢查了模型,但沒有任何uuid字段上的最大長度,也沒有在fk鏈接上返回到uuid。在fk上沒有任何建議它是或者應該限制爲字符,整數,uuids等。

然後我發現這個:http://arthurpemberton.com/2015/04/fixing-uuid-is-not-json-serializable,我入侵了/python2.7/site-packages/django/core /serializers/python.py。博主把它放入models.py。但是我發現同樣的錯誤,在意識到它不是來自serializers/python.py,因爲它是昨天,而是來自/usr/lib/python2.7/uuid.py,第134行,在init。該代碼的相關部分是:

if hex is not None: 
     hex = hex.replace('urn:', '').replace('uuid:', '') 
     hex = hex.strip('{}').replace('-', '') 
     if len(hex) != 32: 
      raise ValueError('badly formed hexadecimal UUID string') 
     int = long(hex, 16) 

,而不是試圖破解更多的核心代碼,因爲該指示的問題是JSON,而不是Python,我離開了這個獨自現在。

最後,我看着這樣的:

https://code.djangoproject.com/ticket/24012

據說有幾次在這裏,Django的 「UUIDField產生的UUID在Python」。現在這裏有一些歷史。我創建了一行,一個模型A到Django的實例,其中一個沒有uuid,沒有日期字段,並且沒有問題。 (uuidfield在抽象模型上,所以它在創建對象時創建)。我這樣做是因爲我需要Model A實例的uuid作爲模型B中的fk字段,這是我現在正在努力的一個。我通過將模型A uuid複製到csv文件中的模型B的fk字段中,然後將其轉換爲json以便將其用作固定裝置來完成此操作。

  1. 在轉換爲json之前,uuid是否有可能在此複製粘貼操作中遇到問題?
  2. 如果不是這樣,那就意味着即使它創建時它是一個可接受的Python對象,通過json轉換搞砸了它,對嗎?
  3. 如果是這樣的話,什麼是解決方法?
  4. Arthur Pemberton代碼可以在這個過程中的其他地方工作嗎?
  5. 如果我離開uuid,我可以做這個工作,但是我必須回去把所有的fk uuid都手動放入。有更好的解決方案嗎?也許是單獨的該字段的批量插入?
  6. 這對我來說可能是一個反覆出現的問題,因爲我也在使用Scrapy,它支持但不需要json。我的所有物品都不會與uuid一起出現,但我如何自動將他們的fk添加到我的流程中以便將它們導入到Django中?
  7. 或者這完全是忘記uuids的好理由嗎?

謝謝。

編輯/ UPDATE每@rolf:

因爲我剛剛發現,Django的殼相差超過我意識到(殼可以找到設置,常規解釋不了),我決定一次運行這個在每一個,但結果是一樣的。

(cannon)[email protected]:~/Projects/cannon/jamf$ python manage.py shell 
Python 2.7.10 (default, Oct 14 2015, 16:09:02) 


IPython 4.0.3 -- An enhanced Interactive Python. 

In [1]: uuid.UUID(a82857b6-e336-4c6c-8499-47601770b39d) 
File "<ipython-input-1-e282858da374>", line 1 
uuid.UUID(a82857b6-e336-4c6c-8499-47601770b39d) 
         ^
SyntaxError: invalid syntax 


In [2]: uuid.UUID(a0a69415-6627-43db-8c7a-b57d0c4cefe2) 
File "<ipython-input-2-befebf1573ba>", line 1 
uuid.UUID(a0a69415-6627-43db-8c7a-b57d0c4cefe2) 
         ^
SyntaxError: invalid syntax 


In [3]: uuid.UUID(e6e11b06-ea3b-4e98-a31f-9a83447ad884) 
File "<ipython-input-3-a59ea095e61a>", line 1 
uuid.UUID(e6e11b06-ea3b-4e98-a31f-9a83447ad884) 
              ^
SyntaxError: invalid syntax 


In [4]: uuid.UUID(bd116432-65d7-4612-abfe-9a99dcaf5cad) 
File "<ipython-input-4-c4a04434aa3c>", line 1 
uuid.UUID(bd116432-65d7-4612-abfe-9a99dcaf5cad) 
        ^
SyntaxError: invalid syntax 

現在,我已經張貼了這個,我注意到,即使堆棧溢出區別對待這些UUID,即,它們是有顏色的,如果是相關的,有意義的來這裏的路上。

但是現在我們知道了這一點,我們該怎麼處理/關於它?

月2日更新

今天早上,我想,怎麼樣一個UUID是從來沒有在任何地方,但在Django?因此,這裏是我所做的:

In [5]: e.uuid 
Out[5]: UUID('61877565-5fe5-4175-9f2b-d24704df0b74') 

In [6]: uuid.UUID(61877565-5fe5-4175-9f2b-d24704df0b74) 
    File "<ipython-input-6-56137f5f4eb6>", line 1 
    uuid.UUID(61877565-5fe5-4175-9f2b-d24704df0b74) 
         ^
SyntaxError: invalid syntax 


In [7]: uuid.UUID('61877565-5fe5-4175-9f2b-d24704df0b74') 
--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-7-3b4d3e5bd156> in <module>() 
----> 1 uuid.UUID('61877565-5fe5-4175-9f2b-d24704df0b74') 

NameError: name 'uuid' is not defined 

這顯然是因爲我離開周圍的字母數字的報價,但爲什麼會產生一個UUID沒有定義的錯誤,而不是「字符串類型」或一些這樣的錯誤我是無法理解。

In [8]: uuid.UUID(61877565-5fe5-4175-9f2b-d24704df0b74) 
    File "<ipython-input-8-56137f5f4eb6>", line 1 
    uuid.UUID(61877565-5fe5-4175-9f2b-d24704df0b74) 
         ^
SyntaxError: invalid syntax 

我第一次用手鍵入字符。我決定通過複製和粘貼來重複測試,但正如你所看到的那樣,它沒有任何區別。如果只有脫字符指向的方式有些奇怪,我們可能會做出某些事情,但是如果是這樣,爲什麼當我用手鍵入時,爲什麼我會在同一個地方得到相同的錯誤?

對我來說,這不再是一個json問題,因爲 - 據我所知 - json從未觸及過這個uuid,除非它在Django的內部工作中做了某種事情。 取而代之的是 1. uuid.UUID生成uuids的方式出錯,或者 2.它在我的系統上生成它們的方式(Ubuntu 15.10,Django 1.9.1,Python 2.7.10)或 3 。當它們返回時讀取和評估它們的方式,如在uuid.UUID()中或在內部自動uuid生成過程之外輸入。

但這也意味着使用uuid.UUID()生成uuids的人將永遠不會知道有一個問題,除非他們做了我所做的事情,而這正是嘗試從外部引入它們。我記得在某處讀到所有的uuids應該是兼容的。所以,除非這裏有人有更好的見解,否則我認爲我們可能會提出一個錯誤報告。但是它是一個Python錯誤,一個Django錯誤還是兩者兼而有之?

+0

會發生什麼?就像這樣: 在[11]:uuid.UUID( '0c7d3f47-5001-4e3f-8b85-4aba9456fb09') 出[11]:UUID( '0c7d3f47-5001-4e3f-8b85-4aba9456fb09') 您是否已經驗證實際價值何處破? – Rolf

回答

2

你的語法是錯誤的:當你在翻譯手動複製/粘貼值

uuid.UUID('61877565-5fe5-4175-9f2b-d24704df0b74') # note the quotes 
相關問題