import uuid from typing import Collection from django.db.models import BooleanField, Model, UUIDField from django.utils.translation import gettext_lazy as _ from django_extensions.db.fields import CreationDateTimeField, ModificationDateTimeField class NiceModel(Model): id: None = None uuid = UUIDField( verbose_name=_("unique id"), help_text=_("unique id is used to surely identify any database object"), primary_key=True, default=uuid.uuid4, editable=False, ) is_active = BooleanField( default=True, verbose_name=_("is active"), help_text=_("if set to false, this object can't be seen by users without needed permission"), ) created = CreationDateTimeField(_("created"), help_text=_("when the object first appeared on the database")) # type: ignore [no-untyped-call] modified = ModificationDateTimeField(_("modified"), help_text=_("when the object was last modified")) # type: ignore [no-untyped-call] def save( # type: ignore [override] self, *, force_insert: bool = False, force_update: bool = False, using: str | None = None, update_fields: Collection[str] | None = None, update_modified: bool = True, ) -> None: self.update_modified = update_modified return super().save( force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields ) class Meta: abstract = True get_latest_by = "modified"