如何将Django模型日期字段的默认值设置为将来的日期?

时间:2018-08-22 15:16:15

标签: django django-models

我正在尝试将Date字段的默认值设置为相对于今天的将来日期。但是,当我将其设置如下时,它会给我以下警告。

return_date = models.DateField(default=(timezone.now() + timedelta(days=1)))

booking.Booking.return_date: (fields.W161) Fixed default value provided.
HINT: It seems you set a fixed date / time / datetime value as default for 
this field. This may not be what you want. If you want to have the 
current date as default, use `django.utils.timezone.now`

与以下代码相同的警告。

return_date = models.DateField(default=(date.today() + timedelta(days=1)))

正确的方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:1)

您给它一个固定的时间(因为您正在调用timezone.now(),所以它的返回值将是默认值),您应该将函数传递给默认值而不用调用它,就像这样

jsonDictionary.setValue(base64String, forKey:"image")

并在您的字段中:

def return_date_time():
    now = timezone.now()
    return now + timedelta(days=1)

答案 1 :(得分:0)

  

尝试使用datetime.date而不是添加到timezone.now

这是django docs的节选 DateField 类DateField(auto_now = False,auto_now_add = False,** options) 日期,在Python中由datetime.date实例表示。有一些额外的可选参数:

DateField.auto_now 每次保存对象时自动将字段设置为现在。对于“最后修改的”时间戳有用。请注意,始终使用当前日期。它不仅是您可以覆盖的默认值。

该字段仅在调用Model.save()时自动更新。以其他方式(例如QuerySet.update())对其他字段进行更新时,该字段不会更新,尽管您可以在类似的更新中为该字段指定自定义值。

DateField.auto_now_add 首次创建对象时,将字段自动设置为现在。对于创建时间戳很有用。请注意,始终使用当前日期。它不仅是您可以覆盖的默认值。因此,即使您在创建对象时为此字段设置了一个值,也会将其忽略。如果您希望能够修改此字段,请设置以下内容,而不要设置auto_now_add = True:

对于DateField:default = date.today-从datetime.date.today() 对于DateTimeField:default = timezone.now-来自django.utils.timezone.now() 此字段的默认表单窗口小部件是TextInput。管理员添加了JavaScript日历和“今天”的快捷方式。包括一个附加的invalid_date错误消息密钥。

选项auto_now_add,auto_now和default是互斥的。这些选项的任何组合都将导致错误。