Django UUIDField模型字段在Django管理页面中引起错误:UUID字符串十六进制格式错误。

5

我有一个Django 1.8项目,在我的其中一个模型上,我正在使用新的UUIDField:

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

我还设置了我的admin.py:

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    pass

当我加载管理员页面尝试创建实例时,出现错误:
ValueError at /admin/core/mymodel/add/
badly formed hexadecimal UUID string

我能够在Django shell(./manage.py shell)中轻松创建实例。但是,一旦我这样做了,在管理网站上查看对象实例列表时仍会出现与之前相同的错误。

有任何想法吗?


你能给我们看一下完整的模型和URL吗?你使用的是哪种数据库?一个建议是检查数据库中id字段的大小,如果你之前运行过迁移的话。 - Glyn Jackson
应该不是这样吗:default=uuid.uuid4()? - DevLounge
@Apero,不,default参数的值应该是一个可调用对象。在这种情况下,uuid.uuid4是正确的选择。@GlynJackson - 我不确定为什么模型/ URL 的其余部分很重要。我会查看我的数据库以确保大小正确。考虑到我可以通过 shell 创建/访问实例而没有问题,我不认为那是问题所在。问题出在管理员界面。 - Joseph
1个回答

11
问题在于我在数据库中有一条已存在的记录,它有一个默认的整数自增的 id ,而在我的模型上指定 id 字段是一个 UUIDField 的时候,这个字段的值只是1,而不是有效的 UUID 十六进制字符串。
删除这个记录解决了我的问题。

有没有办法解决这个问题,而不必删除记录? - lmiguelvargasf
1
您可以手动更新现有记录,以便拥有适当的UUID,而不是当前的任何值。 - Joseph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接