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以便將其用作固定裝置來完成此操作。
- 在轉換爲json之前,uuid是否有可能在此複製粘貼操作中遇到問題?
- 如果不是這樣,那就意味着即使它創建時它是一個可接受的Python對象,通過json轉換搞砸了它,對嗎?
- 如果是這樣的話,什麼是解決方法?
- Arthur Pemberton代碼可以在這個過程中的其他地方工作嗎?
- 如果我離開uuid,我可以做這個工作,但是我必須回去把所有的fk uuid都手動放入。有更好的解決方案嗎?也許是單獨的該字段的批量插入?
- 這對我來說可能是一個反覆出現的問題,因爲我也在使用Scrapy,它支持但不需要json。我的所有物品都不會與uuid一起出現,但我如何自動將他們的fk添加到我的流程中以便將它們導入到Django中?
- 或者這完全是忘記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錯誤還是兩者兼而有之?
會發生什麼?就像這樣: 在[11]:uuid.UUID( '0c7d3f47-5001-4e3f-8b85-4aba9456fb09') 出[11]:UUID( '0c7d3f47-5001-4e3f-8b85-4aba9456fb09') 您是否已經驗證實際價值何處破? – Rolf