Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django fixture中格式错误的十六进制uuid字符串错误;json uuid转换失败_Json_Django_Scrapy_Uuid_Django Fixtures - Fatal编程技术网

Django fixture中格式错误的十六进制uuid字符串错误;json uuid转换失败

Django fixture中格式错误的十六进制uuid字符串错误;json uuid转换失败,json,django,scrapy,uuid,django-fixtures,Json,Django,Scrapy,Uuid,Django Fixtures,到目前为止,我已找到以下链接: 我计算了一下我的uuidfield值。它是len=36,因为其中有破折号。至少我看到的字符串表示是这样的。因此,我用相同的字母数字替换了它,没有破折号,正如错误修复建议的测试一样,但我仍然得到了相同的结果 我检查了模型,但在任何uuid字段上都没有最大长度,在返回uuid的fk链接上也没有最大长度。fk上没有任何信息表明它是或应该限于chars、int、uuid等 然后我发现了这个:我侵入了/python2.7/site-packages/django/c

到目前为止,我已找到以下链接:

我计算了一下我的uuidfield值。它是len=36,因为其中有破折号。至少我看到的字符串表示是这样的。因此,我用相同的字母数字替换了它,没有破折号,正如错误修复建议的测试一样,但我仍然得到了相同的结果

我检查了模型,但在任何uuid字段上都没有最大长度,在返回uuid的fk链接上也没有最大长度。fk上没有任何信息表明它是或应该限于chars、int、uuid等

然后我发现了这个:我侵入了/python2.7/site-packages/django/core/serializers/python.py。博主把它放到models.py中。但在意识到它不是来自serializers/python.py(就像昨天一样)而是来自init中的/usr/lib/python2.7/uuid.py第134行之前,我遇到了同样的错误。该准则的相关部分包括:

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
考虑到问题的症结在于json而非Python,我没有尝试破解更多的核心代码,而是暂时不谈这件事

最后,我看了一下:

这里有几次提到Django的“UUIDField在Python中生成UUID”。下面是一些历史。我在Django中创建了一行模型a的单个实例,其中的fixture没有uuid和datefield,也没有问题。(uuidfield位于抽象模型上,因此它是在创建对象时创建的)。我这样做是因为我需要模型B中fk字段的一个实例的模型A的uuid,这就是我现在正在努力解决的问题。为此,我将模型A uuid复制粘贴到csv文件中模型B上的fk字段中,然后将其转换为json,以便将其用作固定装置

  • 在转换为json之前,uuid是否可能在复制粘贴操作中遇到问题
  • 如果不是,这意味着即使它在创建时是一个可接受的Python对象,但通过json转换会把它搞砸,对吗
  • 如果是这样的话,解决办法是什么
  • Arthur Pemberton代码可以在这个过程中的其他地方使用吗
  • 如果我不使用uuid,我可能可以完成这项工作,但是我必须返回并手动输入所有fk uuid。有更好的解决办法吗?也许只需要大量插入该字段
  • 这可能是我经常遇到的问题,因为我也在使用Scrapy,它支持但不需要json。我的所有抓取项目都不会附带uuid,但是我如何自动将它们的fk添加到我的流程中,以便将它们添加到Django中
  • 还是所有这些都是完全忘记UUID的好理由
  • 谢谢

    根据@rolf编辑/更新

    因为我刚刚发现django shell的差异比我意识到的要大(shell可以找到设置,常规解释器无法找到),所以我决定每一个都运行一次,但结果是一样的

    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)
    
    (加农炮)malikarumi@Tetuoan2:~/Projects/cannon/jamf$python manage.py shell
    Python 2.7.10(默认值,2015年10月14日,16:09:02)
    iPython4.0.3——一种增强的交互式Python。
    在[1]中:uuid.uuid(a82857b6-e336-4c6c-8499-47601770b39d)
    文件“”,第1行
    uuid.uuid(a82857b6-e336-4c6c-8499-47601770b39d)
    ^
    SyntaxError:无效语法
    在[2]中:uuid.uuid(a0a69415-6627-43db-8c7a-b57d0c4cefe2)
    文件“”,第1行
    uuid.uuid(a0a69415-6627-43db-8c7a-b57d0c4cefe2)
    ^
    SyntaxError:无效语法
    [3]中:uuid.uuid(e6e11b06-ea3b-4e98-a31f-9a83447ad884)
    文件“”,第1行
    uuid.uuid(e6e11b06-ea3b-4e98-a31f-9a83447ad884)
    ^
    SyntaxError:无效语法
    在[4]中:uuid.uuid(bd116432-65d7-4612-abfe-9a99dcaf5cad)
    文件“”,第1行
    uuid.uuid(bd116432-65d7-4612-abfe-9a99dcaf5cad)
    ^
    SyntaxError:无效语法
    
    现在我已经发布了这篇文章,我注意到即使堆栈溢出也会以不同的方式对待这些uuid,即它们的颜色,如果这在这里是相关的和有意义的话

    但既然我们知道了这一点,我们该怎么办

    第二次更新

    今天早上我想,一个除了Django以外从未去过任何地方的uuid呢?以下是我所做的:

    (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
    
    [5]中的
    :e.uuid
    Out[5]:UUID('61877565-5fe5-4175-9f2b-d24704df0b74')
    在[6]中:uuid.uuid(61877565-5fe5-4175-9f2b-d24704df0b74)
    文件“”,第1行
    uuid.uuid(61877565-5fe5-4175-9f2b-d24704df0b74)
    ^
    SyntaxError:无效语法
    在[7]中:uuid.uuid('61877565-5fe5-4175-9f2b-d24704df0b74')
    ---------------------------------------------------------------------------
    NameError回溯(最近一次呼叫上次)
    在()
    ---->1 uuid.uuid('61877565-5fe5-4175-9f2b-d24704df0b74')
    NameError:未定义名称“uuid”
    
    这显然是因为我把引号放在了字母数字旁边,但我不明白为什么会产生uuid未定义错误,而不是“字符串类型”或类似的错误

    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
    
    [8]中的
    uuid.uuid(61877565-5fe5-4175-9f2b-d24704df0b74)
    文件“”,第1行
    uuid.uuid(61877565-5fe5-4175-9f2b-d24704df0b74)
    ^
    SyntaxError:无效语法
    
    我第一次用手输入字符。我决定通过复制和粘贴来重复测试,但正如您所看到的,这没有什么区别。如果只有插入符号所指向的5的生成方式有什么奇怪的地方,我们可能会发现一些问题,但是如果是这样,为什么我自己手工输入时在同一个地方会出现同样的错误呢

    对我来说,这似乎不再是一个json问题,因为——据我所知——json从未接触过这个uuid,除非它在Django的内部工作中以某种方式接触过。 相反,两者都有 1.uuid.uuid生成uuid的方式有问题,或者 2.它在我的系统上生成它们的方式,(Ubuntu 15.10,Django 1.9.1,Pyth
    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 
    
    uuid.UUID('61877565-5fe5-4175-9f2b-d24704df0b74') # note the quotes