Поле DateField

Поле DateField применяется в моделях Django для хранения дат без времени. В базе данных оно преобразуется в столбец с типом DATE. Поле принимает объекты datetime.date, автоматически преобразует строки в нужном формате и поддерживает все стандартные параметры полей, такие как auto_now, auto_now_add, null, blank и default. При использовании в формах оно отображается как виджет календаря, что упрощает ввод дат пользователем.

Синтаксис

pythonfield_name = models.DateField(**options)

Пример

Создадим модель для хранения событий с полем даты:

pythonfrom django.db import models

class Event(models.Model):
  title = models.CharField(max_length=200)
  event_date = models.DateField()
  description = models.TextField(blank=True)

  def __str__(self):
    return self.title

Пример

Сохраним событие с указанием конкретной даты:

pythonfrom myapp.models import Event
from datetime import date

event = Event(
  title="Conference",
  event_date=date(2026, 9, 5),
  description="Annual tech conference"
)
event.save()
print(event.event_date)

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

python"2026-09-05"

Пример

Используем параметр auto_now_add для автоматической установки даты создания записи:

pythonfrom django.db import models

class Article(models.Model):
  title = models.CharField(max_length=100)
  content = models.TextField()
  created_date = models.DateField(auto_now_add=True)
  published_date = models.DateField(null=True, blank=True)

  def __str__(self):
    return self.title

При создании статьи поле created_date автоматически заполнится текущей датой:

pythonfrom myapp.models import Article

article = Article(title="New post", content="Content here")
article.save()
print(article.created_date)

Результат выполнения кода (дата будет текущей):

python"2026-09-05"

Пример

Используем параметр auto_now для автоматического обновления даты при изменении записи:

pythonfrom django.db import models

class Profile(models.Model):
  user_name = models.CharField(max_length=50)
  updated_at = models.DateField(auto_now=True)

  def __str__(self):
    return self.user_name

При сохранении профиля дата будет автоматически обновляться:

pythonfrom myapp.models import Profile

profile = Profile(user_name="john_doe")
profile.save()
print(profile.updated_at)

profile.user_name = "john_smith"
profile.save()
print(profile.updated_at)

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

python"2026-09-05"
"2026-09-05"

Пример

Выполним фильтрацию записей по дате с использованием операторов поиска:

pythonfrom myapp.models import Event
from datetime import date

# События после определенной даты
future_events = Event.objects.filter(event_date__gt=date(2026, 9, 1))
for event in future_events:
  print(event.title)

# События за конкретный год
events_2026 = Event.objects.filter(event_date__year=2026)
for event in events_2026:
  print(event.title)

# События с диапазоном дат
from_date = date(2026, 8, 1)
to_date = date(2026, 9, 30)
events_in_range = Event.objects.filter(
  event_date__gte=from_date,
  event_date__lte=to_date
)
for event in events_in_range:
  print(event.title)

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

python"Conference"
"Workshop"
"Conference"
"Workshop"
"Conference"

Смотрите также

  • поле DateTimeField,
    которое хранит дату и время
  • поле TimeField,
    которое хранит только время
  • поле DurationField,
    которое хранит временные интервалы
  • метод dates,
    который возвращает список уникальных дат из QuerySet