Лукап month
Лукап month применяется к полям типа DateField или
DateTimeField в методах фильтрации и позволяет
выбирать записи, у которых месяц в указанной дате
соответствует заданному числовому значению. Этот
лукап удобно использовать для выборки записей за
конкретный месяц, например, для получения всех
статей, опубликованных в определенном месяце
независимо от года.
Синтаксис
Model.objects.filter(field__month=value)
Где field - это имя поля модели типа DateField
или DateTimeField, а value - целое число от
1 до 12, обозначающее месяц (январь - 1,
декабрь - 12).
Пример
Допустим, у нас есть модель статьи с датой публикации:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=100)
published_at = models.DateTimeField(auto_now_add=True)
Найдем все статьи, опубликованные в марте:
from myapp.models import Article
march_articles = Article.objects.filter(published_at__month=3)
for article in march_articles:
print(article.title)
Результат выполнения кода:
"article 1"
"article 2"
"article 3"
Пример
Получим все статьи, опубликованные в декабре текущего года:
from myapp.models import Article
from datetime import date
current_year = date.today().year
december_articles = Article.objects.filter(
published_at__year=current_year,
published_at__month=12
)
for article in december_articles:
print(article.title)
Результат выполнения кода:
"New Year article 1"
"New Year article 2"
Пример
Лукап month можно комбинировать с другими
условиями, например, выбрать статьи, опубликованные
в январе и имеющие статус "published":
from myapp.models import Article
january_published = Article.objects.filter(
published_at__month=1,
status='published'
)
for article in january_published:
print(f"{article.title} - {article.published_at}")
Результат выполнения кода:
"article 1 - 2025-01-15 10:30:00"
"article 2 - 2025-01-22 14:20:00"