Поле DateTimeField
Поле DateTimeField предназначено для хранения даты и времени в базе данных. Оно принимает объекты типа datetime.datetime или строки в формате, поддерживаемом базой данных. Поле автоматически преобразует время в часовой пояс, заданный в настройках проекта. При создании модели можно указать параметры auto_now и auto_now_add для автоматического заполнения поля текущей датой и временем.
Синтаксис
from django.db import models
class ModelName(models.Model):
field_name = models.DateTimeField(**options)
Пример
Создадим модель статьи с полем даты публикации:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
published_at = models.DateTimeField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
В этой модели:
⁅b⁆published_at⁅/b⁆ - поле, которое заполняется вручную.
⁅b⁆created_at⁅/b⁆ - автоматически устанавливается при создании записи.
⁅b⁆updated_at⁅/b⁆ - автоматически обновляется при каждом сохранении.
Пример
Создадим несколько статей с разными датами публикации:
from datetime import datetime
from myapp.models import Article
# Создаём статью с текущей датой и временем
article1 = Article.objects.create(
title="First article",
content="Content of first article",
published_at=datetime.now()
)
# Создаём статью с указанной датой
article2 = Article.objects.create(
title="Second article",
content="Content of second article",
published_at=datetime(2026, 9, 5, 15, 30, 0)
)
print(article1.published_at)
print(article2.published_at)
Результат выполнения кода:
"2026-09-05 12:00:00+00:00"
"2026-09-05 15:30:00+00:00"
Пример
Отфильтруем статьи, опубликованные после определённой даты:
from datetime import datetime
from myapp.models import Article
# Фильтруем статьи, опубликованные после 1 сентября 2026 года
articles = Article.objects.filter(
published_at__date__gte=datetime(2026, 9, 1).date()
)
for article in articles:
print(article.title)
Результат выполнения кода:
"First article"
"Second article"
Пример
Получим все статьи, созданные за последнюю неделю:
from datetime import datetime, timedelta
from myapp.models import Article
# Вычисляем дату неделю назад
week_ago = datetime.now() - timedelta(days=7)
# Получаем статьи, созданные за последнюю неделю
recent_articles = Article.objects.filter(
created_at__gte=week_ago
)
for article in recent_articles:
print(f"{article.title}: {article.created_at}")
Смотрите также
-
поле
DateField,
которое хранит только дату без времени -
поле
TimeField,
которое хранит только время без даты -
поле
DurationField,
которое хранит промежутки времени -
метод
datetimes,
который извлекает уникальные даты и время изQuerySet