Поле DateField
Поле DateField применяется в моделях Django для хранения дат без времени.
В базе данных оно преобразуется в столбец с типом DATE. Поле принимает объекты
datetime.date, автоматически преобразует строки в нужном формате и поддерживает
все стандартные параметры полей, такие как auto_now, auto_now_add,
null, blank и default. При использовании в формах оно
отображается как виджет календаря, что упрощает ввод дат пользователем.
Синтаксис
field_name = models.DateField(**options)
Пример
Создадим модель для хранения событий с полем даты:
from 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
Пример
Сохраним событие с указанием конкретной даты:
from 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)
Результат выполнения кода:
"2026-09-05"
Пример
Используем параметр auto_now_add для автоматической установки даты создания записи:
from 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 автоматически заполнится текущей датой:
from myapp.models import Article
article = Article(title="New post", content="Content here")
article.save()
print(article.created_date)
Результат выполнения кода (дата будет текущей):
"2026-09-05"
Пример
Используем параметр auto_now для автоматического обновления даты при изменении записи:
from 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
При сохранении профиля дата будет автоматически обновляться:
from 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)
Результат выполнения кода:
"2026-09-05"
"2026-09-05"
Пример
Выполним фильтрацию записей по дате с использованием операторов поиска:
from 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)
Результат выполнения кода:
"Conference"
"Workshop"
"Conference"
"Workshop"
"Conference"
Смотрите также
-
поле
DateTimeField,
которое хранит дату и время -
поле
TimeField,
которое хранит только время -
поле
DurationField,
которое хранит временные интервалы -
метод
dates,
который возвращает список уникальных дат изQuerySet