Лукап month

Лукап month применяется к полям типа DateField или DateTimeField в методах фильтрации и позволяет выбирать записи, у которых месяц в указанной дате соответствует заданному числовому значению. Этот лукап удобно использовать для выборки записей за конкретный месяц, например, для получения всех статей, опубликованных в определенном месяце независимо от года.

Синтаксис

pythonModel.objects.filter(field__month=value)

Где field - это имя поля модели типа DateField или DateTimeField, а value - целое число от 1 до 12, обозначающее месяц (январь - 1, декабрь - 12).

Пример

Допустим, у нас есть модель статьи с датой публикации:

pythonfrom django.db import models

class Article(models.Model):
  title = models.CharField(max_length=100)
  published_at = models.DateTimeField(auto_now_add=True)

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

pythonfrom myapp.models import Article

march_articles = Article.objects.filter(published_at__month=3)
for article in march_articles:
  print(article.title)

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

python"article 1"
"article 2"
"article 3"

Пример

Получим все статьи, опубликованные в декабре текущего года:

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

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

python"New Year article 1"
"New Year article 2"

Пример

Лукап month можно комбинировать с другими условиями, например, выбрать статьи, опубликованные в январе и имеющие статус "published":

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

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

python"article 1 - 2025-01-15 10:30:00"
"article 2 - 2025-01-22 14:20:00"

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

  • лукап year,
    который фильтрует записи по году
  • лукап day,
    который фильтрует записи по дню месяца
  • лукап week,
    который фильтрует записи по неделе года
  • лукап quarter,
    который фильтрует записи по кварталу