Я определил модель:
class Topic(models.Model):
"""A topic the user is learning about"""
text = models.CharField(max_length=200)
date_added = models.TimeField(auto_now_add=True)
def __str__(self):
"""Return a string representation of the model"""
return self.text
Я получаю их в представлении:
topics = Topic.objects.order_by("date-added")
Я уже давно работаю над этим проектом и темы отображались в правильном порядке, но в какой-то момент я заметил, что они расположены не в хронологическом порядке.
Я пытался увидеть даты (в оболочке Django):
for topic in Topic.objects.order_by("date_added"):
print(topic, topic.date_added.strftime("%d.%m.%Y $H:%M:%S"))
Результат:
Hip-hop 01.01.1900 10:39:27
Rap2 01.01.1900 10:40:17
Chess 01.01.1900 15:45:32
Rock Climbing 01.01.1900 15:45:43
Programming 01.01.1900 15:51:18
Boxing 01.01.1900 18:21:59
Rap 01.01.1900 20:50:58
Видно, что все они добавлены 1 января 1900 года.
Как настроить дату в Django, чтобы она отображалась правильно?
Потому что наше поле указывает только время.
Да спасибо!
Вы использовали date_added = models.TimeField(auto_now_add=True)
, но в идеале так и должно быть date_added = models.DateTimeField(auto_now_add=True)
.
Я думаю, что 1 января 1900 года является датой по умолчанию, поскольку поле времени принимает только значения времени, поэтому оно устанавливает дату по умолчанию на 1 января 1900 года.
TimeField — здесь вы можете увидеть, что таймполе используется для времени.
DateTimeField — здесь следует использовать дату и время для хранения даты и времени поля date_added
.
Я изменил тип на DateTimeField, но начал получать странные ошибки, указывающие на некоторые проблемы с полями даты. Как безболезненно менять типы?
Я исправил последнюю проблему, выполнив миграцию. Спасибо за помощь
это
TimeField
. может быть, вместо этого ты хочешьDateTimeField