【问题标题】:Django UUIDField modelfield causes error in Django admin: badly formed hexadecimal UUID stringDjango UUIDField modelfield 在 Django admin 中导致错误:格式错误的十六进制 UUID 字符串
【发布时间】:2015-12-03 09:58:12
【问题描述】:

我有一个 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) 创建一个没有问题的实例。但是,一旦我这样做了,即使在查看对象实例列表时,我也会在管理站点上遇到与以前相同的错误。

有什么想法吗?

【问题讨论】:

  • 我们可以查看您的完整型号和网址吗?你用的是什么数据库?一个建议是检查数据库中 id 字段的大小,如果您之前运行过迁移。
  • 不应该是:default=uuid.uuid4() 吗?
  • @Apero,不,default 参数的值应该是可调用的。在这种情况下,uuid.uuid4 是正确的。 @GlynJackson - 我不确定为什么模型/ URL 的其余部分很重要。我将查看我的数据库以仔细检查大小是否正确。考虑到我可以毫无问题地通过 shell 创建/访问实例,我不认为这会成为问题。问题出在管理界面。

标签: python django django-models uuid


【解决方案1】:

问题是,在我明确指出我的模型上的 id 字段是 UUIDField 之前,我在数据库中有一条默认整数自动增量 id 的现有记录。该字段的值只是1,它不是一个有效的 UUID 十六进制字符串。

删除此记录解决了我的问题。

【讨论】:

  • 有什么方法可以在不删除记录的情况下解决这个问题?
  • 您可以手动更新现有记录以具有正确的 UUID 而不是它们现在具有的任何值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 2023-01-28
  • 2016-11-22
相关资源
最近更新 更多