28

我有一个几乎总是在晚上 10:00 开始的事件模型,但有时可能会更早/更晚开始。为了让管理员更轻松,我希望时间默认为晚上 10 点,但如果需要可以更改;无论如何都需要设置日期,因此它不需要默认值,但理想情况下它会默认为当前日期。

我意识到我可以使用 datetime.now 来完成后者,但是是否可以(以及如何)将时间设置为特定的默认值?

更新:我得到答案的速度比我想知道哪个(s)做我想要完成的事情要快......在我问之前,我可能应该进一步了解该应用程序。感谢您在此期间的帮助!

4

5 回答 5

19

来自 Django 文档Field.default

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

所以这样做:

from datetime import datetime, timedelta

def default_start_time():
    now = datetime.now()
    start = now.replace(hour=22, minute=0, second=0, microsecond=0)
    return start if start > now else start + timedelta(days=1)  

class Something(models.Model):
    timestamp = models.DateTimeField(default=default_start_time)
于 2013-04-16T23:49:23.557 回答
15

如果您有兴趣将默认值设置为TimeFieldhttps ://code.djangoproject.com/ticket/6754

不:

start = models.TimeField(default='20:00')

改为:

import datetime
start = models.TimeField(default=datetime.time(16, 00))
于 2015-08-04T10:02:20.683 回答
4

datetime.time(16, 00)不起作用。

如果datetime.time(datetime.now())您试图获取当前时间或datetime.time(your_date_time)

其中 your_date_time = datetime.datetime 对象

于 2019-01-16T16:29:02.810 回答
1

你见过这个吗?https://docs.djangoproject.com/en/dev/ref/models/fields/#default

这可能就是你要找的。

这里也讨论了:Django 模型中字段的默认值

于 2013-04-16T02:55:22.833 回答
-2

像这样的东西?

import datetime

dt = datetime.now()
dt.hour = 22
dt.minute = 0
dt.second = 0

没有上下文很难更具体。

于 2013-04-16T02:01:26.580 回答