【发布时间】:2014-09-14 15:48:56
【问题描述】:
我注意到 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 使用不同的激活密钥创建了 2 个用户。
这里发生了什么? Python在wsgi应用程序启动时加载模型对象并计算模型的默认值还是那样?为什么 uuid 在第一种情况下给出相同的值而在第二种情况下给出不同的值?
谢谢。
【问题讨论】:
-
正如@Rohan 提到的,它必须是可调用的。这是相关文档docs.djangoproject.com/en/dev/ref/models/fields/#default
标签: python django django-models