Могу ли я установить определенное время по умолчанию для поля datetime для Django? - программирование
Подтвердить что ты не робот

Могу ли я установить определенное время по умолчанию для поля datetime для Django?

У меня есть модель для событий, которые почти всегда начинаются в 10:00 вечера, но иногда могут начинаться раньше/позже. Чтобы упростить администрирование, я бы хотел, чтобы время было по умолчанию до 10 вечера, но при необходимости можно изменить; дата должна быть установлена ​​независимо, поэтому для нее не требуется значение по умолчанию, но в идеале она будет по умолчанию текущей.

Я понимаю, что я могу использовать datetime.now для выполнения последнего, но возможно ли (и как) установить время на определенное значение по умолчанию?

Обновление. Я получаю ответы быстрее, чем я могу выяснить, какие из них делают то, что я пытаюсь выполнить... Вероятно, я должен был продолжить работу с приложением, прежде чем я попрошу. Спасибо за помощь, тем временем!

4b9b3361

Ответ 1

Из документов 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)

Ответ 2

если вам интересно установить значение по умолчанию TimeField: https://code.djangoproject.com/ticket/6754

не

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

сделайте вместо этого:

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

Ответ 4

datetime.time(16, 00) не работает.

Вместо этого используйте datetime.time(datetime.now()) если вы пытаетесь получить текущее время или datetime.time(your_date_time)

Где your_date_time = datetime.datetime объект

Ответ 5

Что-то вроде этого?

import datetime

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

Трудно быть более конкретным без контекста.