Могу ли я установить определенное время по умолчанию для поля datetime для Django?
У меня есть модель для событий, которые почти всегда начинаются в 10:00 вечера, но иногда могут начинаться раньше/позже. Чтобы упростить администрирование, я бы хотел, чтобы время было по умолчанию до 10 вечера, но при необходимости можно изменить; дата должна быть установлена независимо, поэтому для нее не требуется значение по умолчанию, но в идеале она будет по умолчанию текущей.
Я понимаю, что я могу использовать datetime.now для выполнения последнего, но возможно ли (и как) установить время на определенное значение по умолчанию?
Обновление. Я получаю ответы быстрее, чем я могу выяснить, какие из них делают то, что я пытаюсь выполнить... Вероятно, я должен был продолжить работу с приложением, прежде чем я попрошу. Спасибо за помощь, тем временем!
Ответы
Ответ 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))
Ответ 3
Вы видели это? https://docs.djangoproject.com/en/dev/ref/models/fields/#default
Это, вероятно, то, что вы ищете.
Здесь также обсуждается: Значение по умолчанию для поля в модели Django
Ответ 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
Трудно быть более конкретным без контекста.