Django datetime问题(default = datetime.now())

问题:

我有这样的数据库模型:

from datetime import datetime    

class TermPayment(models.Model):
    # cut out some fields, non relevant to the question
    date = models.DateTimeField(default=datetime.now(), blank=True)

当添加新实例时:

tp = TermPayment.objects.create(**kwargs)

我有一个问题:数据库中的所有记录在日期字段中是相同的值 – 第一次付款的日期。服务器重新启动后 – 一个记录有新日期,其他记录与第一个记录相同。它看起来像一些数据缓存被使用,但我找不到在哪里。
数据库:mysql 5.1.25
django v1.1.1

回答:

看起来像定义模型时正在评估datetime.now(),而不是每次添加记录时。
Django有一个功能来完成你现在所做的工作:

date = models.DateTimeField(auto_now_add=True, blank=True)

要么

date = models.DateTimeField(default=datetime.now, blank=True)

第二个例子与您目前所拥有的不同之处在于缺少括号。通过datetime.now不带圆括号,你传递的是实际的函数,每次添加一个记录时都会调用这个函数。如果你通过它datetime.now(),那么你只是评估函数并传递返回值。
更多信息可以在Django的model field reference

Code问答: http://codewenda.com/topics/python/
Stackoverflow: Django datetime issues (default=datetime.now())

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 87 = 90