模型中的Django自动UUID不唯一

模型中的Django自动UUID不唯一,django,django-models,Django,Django Models,不确定这是否是Django中的一个bug,或者它不支持我正在尝试做的事情(或者我是如何做的) 我的模型的一个片段: 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=

不确定这是否是Django中的一个bug,或者它不支持我正在尝试做的事情(或者我是如何做的)

我的模型的一个片段:

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\u hash
的默认值设置为调用
uuid.uuid4()

工作很好。。。但是,多次调用UserProfile(快速创建新用户,即使看起来只有几分钟,但我没有正式时间)将导致多个用户使用相同的
login\u hash

django(我在1.7.4上)似乎正在缓存
uuid4()
的结果一段时间。对我想做的不好

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

有没有一种方法可以在django中实现这一点,从而使其与数据库无关?

工作很好。。。但是,多次调用UserProfile(快速创建新用户,即使看起来只有几分钟,但我没有正式时间)将导致多个用户使用相同的登录\u哈希

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

相反,您要做的是传递一个callable作为默认值。类似这样:
default=uuid.uuid4

另外,对于
CharField
我强烈建议不允许
NULL
值以及空白值。也不清楚您是否真的希望允许此字段为空值,但我们假设您确实希望。您应该以以下方式结束:

login_hash = models.CharField(max_length=36, blank=True, default=uuid.uuid4)
“拍额头”。。。当然讨厌一对牙套把事情搞砸了:)谢谢!