from django.db import models from django.utils import timezone class TimestampMixin(models.Model): created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: abstract = True class SoftDeleteMixin(models.Model): deleted_at = models.DateTimeField(null=True, blank=True) class Meta: abstract = True def soft_delete(self): self.deleted_at = timezone.now() self.save(update_fields=['deleted_at']) def restore(self): self.deleted_at = None self.save(update_fields=['deleted_at']) @property def is_deleted(self): return self.deleted_at is not None class SlugMixin(models.Model): slug = models.SlugField(max_length=200, unique=True) class Meta: abstract = True