Django Model Utils

django-model-utils предоставляет дополнительные возможности для Django моделей.

Установка

1# Установка пакета
2pip install django-model-utils
1# Или через Poetry
2poetry add django-model-utils

TimeStampedModel

1from model_utils.models import TimeStampedModel
2
3class Book(TimeStampedModel):
4    title = models.CharField(max_length=200)
5    # Автоматически добавляются created и modified поля

StatusModel для статусов

 1from model_utils.models import StatusModel
 2from model_utils import Choices
 3
 4class Order(StatusModel):
 5    STATUS = Choices(
 6        ('pending', 'Ожидает'),
 7        ('processing', 'Обрабатывается'),
 8        ('completed', 'Завершен'),
 9    )
10
11    status = StatusField()

FieldTracker для отслеживания изменений

 1from model_utils import FieldTracker
 2
 3class Article(models.Model):
 4    title = models.CharField(max_length=200)
 5    content = models.TextField()
 6    tracker = FieldTracker(fields=['title', 'content'])
 7
 8    def save(self, *args, **kwargs):
 9        if self.tracker.has_changed('title'):
10            print(f'Заголовок изменился на: {self.title}')
11        super().save(*args, **kwargs)

FAQ

Q: Как отслеживать изменения полей?
A: Используй FieldTracker для мониторинга изменений.

Q: Можно ли кастомизировать Choices?
A: Да, используй дополнительные параметры в Choices.