Django datetime问题(默认值=datetime.now())

2024-03-29 15:57:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下db型号:

from datetime import datetime    

class TermPayment(models.Model):
    # I have excluded fields that are irrelevant to the question
    date = models.DateTimeField(default=datetime.now(), blank=True)

我使用以下命令添加新实例:

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

我的问题:数据库中的所有记录在日期字段中都有相同的值,即第一次付款的日期。服务器重新启动后,一条记录具有新的日期,而另一条记录与第一条记录具有相同的日期。看起来有些数据被缓存了,但我找不到位置。

数据库:mysql 5.1.25

django 1.1.1版


Tags: fromimport数据库fieldsdbdatetimemodelthat
3条回答

从django模型默认字段上的documentation

字段的默认值。这可以是值或可调用对象。如果可调用,则每次创建新对象时都将调用它。

因此,应遵循以下原则:

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

在定义模型时,似乎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

与其使用datetime.now,不如真正使用from django.utils.timezone import now

参考:

所以你可以这样做:

from django.utils.timezone import now


created_date = models.DateTimeField(default=now, editable=False)

相关问题 更多 >