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/40
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,因为它有破折号。至少我能看到的字符串表示就是这样。所以我用相同的字母数字替换它没有破折号,正如错误修正的测试建议,但我仍然得到相同的结果。
我检查了模型,但是在任何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在Python和#34;中生成了UUID,这里有几次说明。现在这里有一些历史。我创建了一行,模型A的单个实例进入Django,其中一个没有uuid且没有日期字段且没有问题的夹具。 (uuidfield在抽象模型上,因此在创建对象时创建)。我这样做是因为我需要模型B中fk字段的模型A实例的uuid,这是我现在正在努力的那个。我通过将模型A uuid复制粘贴到csv文件中的模型B上的fk字段中,然后将其转换为json以便将其用作夹具。
感谢。
每个@rolf编辑/更新:
因为我刚发现django shell比我意识到的更多(shell可以找到设置,常规解释器不能)我决定在每一个中运行一次,但结果是一样的。< / p>
(cannon)malikarumi@Tetuoan2:~/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
现在我发布了这个,我注意到即使Stack Overflow也会以不同的方式处理这些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错误,而不是&#39;字符串类型&#39;或者一些这样的错误超出了我的范围。
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
我第一次用手键入字符。我决定通过复制和粘贴重复测试,但正如你所看到的,它没有任何区别。如果有一些奇怪的方式,只有插入符号指向的5就生成了,我们可能会做某些事情,但如果是这样的话,为什么我在手工打字时会在同一个地方出现同样的错误?
这对我来说似乎不再是一个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 bug,Django bug还是两者兼而有之?
答案 0 :(得分:2)
您的语法错误:
uuid.UUID('61877565-5fe5-4175-9f2b-d24704df0b74') # note the quotes