gpt4 book ai didi

python - UUID 作为 Django 模型中的默认值

转载 作者:太空狗 更新时间:2023-10-29 20:33:32 34 4
gpt4 key购买 nike

我注意到 Django 模型中默认值的奇怪行为。例如我们有一个简单的 django 模型:

import uuid
...

class SiteUser(models.Model):
...
username = models.CharField(max_length=255, verbose_name=u"Username")
activation_key = models.CharField(max_length=64, verbose_name=u"Activation key", default=uuid.uuid1())

当我创建一个新用户,然后再创建一个类似的用户时:

user_a = SiteUser(username="UserA")
user_a.save()
user_b = SiteUser(username="UserB")
user_b.save()

Django 让 2 个用户拥有相同的 activation_key

然后我就这样做了:

user_a = SiteUser(username="UserA")
user_a.activation_key = uuid.uuid1()
user_a.save()
user_b = SiteUser(username="UserB")
user_b.activation_key = uuid.uuid1()
user_b.save()

一切正常,Django 使用不同的激活 key 创建了 2 个用户。

这是怎么回事? Python 加载模型对象并在 wsgi 应用程序启动时计算模型的默认值?为什么 uuid 在第一种情况下给出相同的值而在第二种情况下给出不同的值?

谢谢。

最佳答案

问题是您设置的 default 属性

activation_key = models.CharField(max_length=64, verbose_name=u"Activation key",
default=uuid.uuid1())

在这里,您将默认值设置为不可调用的值,而是在初始化此模型类时由 uuid.uuid1() 调用返回的值。

您应该将其设置为 default=uuid.uuid1,这会将其设置为可调用的,并且每次需要使用新的默认值时都会设置新的 uuid。

关于python - UUID 作为 Django 模型中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25835069/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com