简体   繁体   中英

Can I set a specific default time for a Django datetime field?

I have a model for events which almost always start at 10:00pm, but may on occasion start earlier/later. To make things easy in the admin, I'd like for the time to default to 10pm, but be changeable if needed; the date will need to be set regardless, so it doesn't need a default, but ideally it would default to the current date.

I realize that I can use datetime.now to accomplish the latter, but is it possible (and how) to I set the time to a specific default value?

Update: I'm getting answers faster than I can figure out which one(s) does what I'm trying to accomplish...I probably should have been further along with the app before I asked. Thanks for the help in the meantime!

From the Django documents for Field.default :

The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created.

So do this:

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)

in case you're interested into setting default value to TimeField : https://code.djangoproject.com/ticket/6754

don't:

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

do instead:

import datetime
start = models.TimeField(default=datetime.time(16, 00))

Have you seen this? https://docs.djangoproject.com/en/dev/ref/models/fields/#default

That's probably what you're looking for.

It's also discussed here: Default value for field in Django model

datetime.time(16, 00) does not work.

Use datetime.time(datetime.now()) instead if you are trying to get the current time or datetime.time(your_date_time)

Where your_date_time = datetime.datetime object

import datetime

default_time = datetime.datetime.now().time()

time_of_visit = models.TimeField(default=default_time)

it will be work fine

Something like this?

import datetime

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

Hard to be more specific without context.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM