Охватываемые темы: Поля дат в модели, Работа с датами в Python, Форматирование в шаблоне, Форматирование в Python.
Поля дат в модели
from django.db import models
class Task(models.Model):
created_at = models.DateTimeField(auto_now_add=True) # при создании
updated_at = models.DateTimeField(auto_now=True) # при каждом save
due_date = models.DateField(null=True, blank=True)
Работа с датами в Python
from django.utils import timezone
from datetime import date, timedelta
now = timezone.now() # aware datetime (с таймзоной)
today = timezone.localdate() # локальная дата
# Арифметика
tomorrow = today + timedelta(days=1)
week_later = today + timedelta(weeks=1)
# Сравнение
overdue = Task.objects.filter(due_date__lt=today, status='todo')
Форматирование в шаблоне
{{ task.created_at }} <!-- 2024-01-15 10:30:00+00:00 -->
{{ task.created_at|date:"d.m.Y" }} <!-- 15.01.2024 -->
{{ task.created_at|date:"d M Y, H:i" }} <!-- 15 Jan 2024, 10:30 -->
{{ task.created_at|timesince }} <!-- 3 дня назад -->
{{ task.due_date|timeuntil }} <!-- через 2 дня -->
Форматирование в Python
from django.utils.formats import date_format
formatted = date_format(task.created_at, 'd.m.Y H:i')
# Стандартный Python strftime
task.created_at.strftime('%d.%m.%Y %H:%M')
Настройки форматирования
# settings.py
LANGUAGE_CODE = 'ru-ru'
USE_I18N = True
USE_L10N = True
USE_TZ = True
TIME_ZONE = 'Europe/Moscow'
# Форматы для ru локали
DATE_FORMAT = 'd.m.Y'
DATETIME_FORMAT = 'd.m.Y H:i'
Фильтрация по датам
from django.utils import timezone
# Задачи на сегодня
today = timezone.localdate()
Task.objects.filter(due_date=today)
# Задачи этой недели
week_start = today - timedelta(days=today.weekday())
Task.objects.filter(due_date__range=[week_start, week_start + timedelta(days=6)])
# По году/месяцу
Task.objects.filter(created_at__year=2024, created_at__month=1)
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!