模型中的 Django Auto UUID 不是唯一的

Django Auto UUID in Model not unique

不确定这是否是 Django 中的错误,或者它只是不支持我正在尝试做的事情(或我正在做的事情)。

我的模型片段:

class UserProfile(models.Model):
    user = models.OneToOneField(User, primary_key=True, related_name='profile'
    login_hash = models.CharField(max_length=36, blank=True, null=True, default=uuid.uuid4())
    ...

如您所见,我已将 login_hash 的默认值设置为调用 uuid.uuid4()

工作正常...但是,对 UserProfile 的多次调用(快速创建新用户,甚至看似几分钟,但我没有正式时间)将导致相同的 login_hash用户。

看来 django(我在 1.7.4)正在缓存 uuid4() 的结果一段时间。不适合我正在尝试做的事情。

解决方案: 我正在使用。我只是在数据库上设置了一个 'on insert' 触发器,这样当我插入一条新记录时,数据库会生成 UUID,但仅限于 inserts/new 条记录。

有没有办法在 django 中做到这一点,这样我就可以让它与数据库无关?

works fine... however, multiple calls to the UserProfile (creating new users quickly, even seemingly a few minutes, but i've not an official time) will result in the same login_hash for multiple users.

由于代码是当前编写的,您在导入 UserProfile 时调用 uuid.uuid4()。它将被调用一次,结果值将成为所有新创建的默认值。

您要做的是默认传递 callable。像这样:default=uuid.uuid4.

此外,对于 CharField,我强烈建议不允许使用 NULL 值和空白值。也不清楚您是否真的希望此字段允许空白值,但我们假设您这样做了。你应该这样结束:

login_hash = models.CharField(max_length=36, blank=True, default=uuid.uuid4)