【问题标题】:could not create unique index, key is duplicated django postgres无法创建唯一索引,键重复 django postgres
【发布时间】:2021-06-22 02:56:52
【问题描述】:

我得到了具有相同 uuid 的以下用户表。我希望这个 uuid 是独一无二的。但是在使用 unique=True 和 editable=False 从我的用户模型中更改 uuid 时 在执行迁移命令时,我收到“psycopg2.errors.UniqueViolation: could not create unique index”错误,其中 Key (hnid)=(8c0bc4a2-165a-47d5-8084-8b87600c7fe8) is duplicated。

我的模型.py

hnid = models.UUIDField("HNID", default=uuid.uuid4, blank=True, null=True, unique=True,editable=False)

注意:我使用的是 postgres 我该如何解决这个问题

【问题讨论】:

  • 您必须先更改重复​​值或删除这些条目。
  • 我该怎么做?对不起,我是新手
  • 请将您的模型添加到问题中。

标签: django django-models django-views


【解决方案1】:

请注意您对 hnid 的定义。可以直接使用primary_key=True

hnid = models.UUIDField(
        primary_key=True,
        default=uuid_lib.uuid4,
        editable=False,
    )

primary_key=True 暗示 null=Falseunique=True 并且是只读的。根据文档,对象上只允许有一个主键。 blank=True 不是一个好主意:你不想在你的对象上有一个空白的主键。另外,它不适用于unique=True

关于迁移,Django 在他们的文档中给出了一个很好的例子:https://docs.djangoproject.com/en/3.1/howto/writing-migrations/#migrations-that-add-unique-fields 而且效果很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多