Dmi*_*kov 9 python django django-models
我注意到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())
Run Code Online (Sandbox Code Playgroud)
当我创建一个新用户,之后另一个像这样:
user_a = SiteUser(username="UserA")
user_a.save()
user_b = SiteUser(username="UserB")
user_b.save()
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
一切正常,Django创建了2个具有不同激活密钥的用户.
这里发生了什么?Python加载模型对象并在wsgi应用程序启动时计算模型的默认值或者?为什么uuid在第一种情况下给出相同的值但在第二种情况下不同?
谢谢.
Roh*_*han 21
问题是default您设置的属性
activation_key = models.CharField(max_length=64, verbose_name=u"Activation key",
default=uuid.uuid1())
Run Code Online (Sandbox Code Playgroud)
这里设置的默认值不是可调用的,而是uuid.uuid1()在初始化此模型类时通过调用返回的值.
您应将其设置为将default=uuid.uuid1其设置为可调用,并在每次需要使用新的默认值时设置新的uuid.
ozr*_*983 10
从Django 1.8开始,有一个新的UUIDField可用.它在以下链接中描述,其中还包括如何设置默认值:
https://docs.djangoproject.com/en/1.8/ref/models/fields/#uuidfield
| 归档时间: |
|
| 查看次数: |
10693 次 |
| 最近记录: |