Поле DateTimeField

Поле DateTimeField предназначено для хранения даты и времени в базе данных. Оно принимает объекты типа datetime.datetime или строки в формате, поддерживаемом базой данных. Поле автоматически преобразует время в часовой пояс, заданный в настройках проекта. При создании модели можно указать параметры auto_now и auto_now_add для автоматического заполнения поля текущей датой и временем.

Синтаксис

pythonfrom django.db import models

class ModelName(models.Model):
  field_name = models.DateTimeField(**options)

Пример

Создадим модель статьи с полем даты публикации:

pythonfrom 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⁆ - автоматически обновляется при каждом сохранении.

Пример

Создадим несколько статей с разными датами публикации:

pythonfrom 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)

Результат выполнения кода:

python"2026-09-05 12:00:00+00:00"
"2026-09-05 15:30:00+00:00"

Пример

Отфильтруем статьи, опубликованные после определённой даты:

pythonfrom 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)

Результат выполнения кода:

python"First article"
"Second article"

Пример

Получим все статьи, созданные за последнюю неделю:

pythonfrom 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