Класс Now
Класс Now применяется в запросах Django для получения
текущей даты и времени на стороне базы данных. Он возвращает
объект времени, соответствующий моменту выполнения запроса.
В отличие от Python-функции datetime.now, значение
вычисляется непосредственно в базе данных, что гарантирует
единообразие времени для всех записей в одном запросе.
Класс принимает необязательный аргумент tzinfo для
указания часового пояса.
Синтаксис
from django.db.models import Now
Now(tzinfo=None)
Пример
Давайте обновим поле 'last_modified' у всех статей,
установив в него текущую дату и время:
from myapp.models import Article
from django.db.models import Now
updated_count = Article.objects.update(last_modified=Now())
print(updated_count)
Результат выполнения кода:
"15"
Пример
Давайте добавим новую статью, установив поле 'created_at'
в текущую дату и время с помощью класса Now:
from myapp.models import Article
from django.db.models import Now
article = Article.objects.create(
title="New article",
content="Article content",
created_at=Now()
)
print(article.title)
print(article.created_at)
Результат выполнения кода:
"New article"
"2026-09-05 14:30:15.123456+00:00"
Пример
Давайте отфильтруем статьи, созданные до текущего момента
с использованием класса Now:
from myapp.models import Article
from django.db.models import Now
old_articles = Article.objects.filter(
created_at__lt=Now()
)
for article in old_articles:
print(article.title)
Результат выполнения кода:
"First article"
"Second article"
"Third article"
Пример
Давайте аннотируем статьи полем 'current_time',
содержащим текущую дату и время, и выведем результат:
from myapp.models import Article
from django.db.models import Now, Value, F
articles = Article.objects.annotate(
current_time=Now()
).values('title', 'current_time')
for article in articles:
print(article)
Результат выполнения кода:
[{'title': 'First article', 'current_time': datetime.datetime(2026, 9, 5, 14, 30, 15, 123456, tzinfo=datetime.timezone.utc)}, {'title': 'Second article', 'current_time': datetime.datetime(2026, 9, 5, 14, 30, 15, 123456, tzinfo=datetime.timezone.utc)}]