date_hierarchy
Атрибут date_hierarchy в классе ModelAdmin позволяет добавить в административную панель навигацию по датам на странице списка объектов. Этот атрибут указывает имя поля модели, которое будет использоваться для создания иерархической навигации по датам, что значительно упрощает фильтрацию записей по временным периодам: годам, месяцам и дням.
Синтаксис
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
date_hierarchy = 'field_name'
Пример . Работа с date_hierarchy
Рассмотрим модель Article, у которой есть поле created_at типа DateTimeField. Добавим навигацию по датам в административной панели:
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=20)
def __str__(self):
return self.title
from django.contrib import admin
from .models import Article
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
list_display = ['title', 'status', 'created_at']
date_hierarchy = 'created_at'
Теперь в интерфейсе административной панели появится навигационная панель в верхней части списка статей. Она будет содержать ссылки для фильтрации по годам, при выборе года - по месяцам, а при выборе месяца - по дням.
Использование поля с датой
date_hierarchy может принимать как поле с типом DateField, так и DateTimeField. Если используется DateTimeField, то навигация будет учитывать только дату, время игнорируется:
from django.contrib import admin
from .models import Event
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
list_display = ['name', 'event_date']
date_hierarchy = 'event_date'
В этом случае навигационная панель будет построена на основе поля event_date, отображая список событий с возможностью фильтрации по датам.
Настройка отображения
date_hierarchy автоматически подстраивается под язык локали и отображает названия месяцев на языке, установленном в настройках Django. Это позволяет легко использовать навигацию в интернационализированных проектах.
from django.contrib import admin
from .models import Order
@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
list_display = ['id', 'customer', 'order_date']
list_filter = ['status']
search_fields = ['customer__name']
date_hierarchy = 'order_date'
Если дата в объекте не указана (например, null), то такие объекты отображаются в отдельной группе "Без даты" или игнорируются в навигации в зависимости от версии Django.
Смотрите также
-
атрибут
list_display,
который определяет отображаемые колонки в списке объектов -
атрибут
list_filter,
который добавляет фильтры в боковую панель -
атрибут
search_fields,
который добавляет поле поиска на страницу списка -
атрибут
ordering,
который задает сортировку объектов в списке