From ba0e83ca9c4987ec68d1ff6f83ebc39305339d15 Mon Sep 17 00:00:00 2001 From: Sadman Sakib Date: Fri, 8 Mar 2024 17:54:14 +0600 Subject: [PATCH] feat: added models.py file and moved BaseModel in here --- common/models.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 common/models.py diff --git a/common/models.py b/common/models.py new file mode 100644 index 0000000..49854e1 --- /dev/null +++ b/common/models.py @@ -0,0 +1,84 @@ +# Standard library imports +import uuid + +# Django imports +from django.conf import settings +from django.db import models +from django.utils.translation import gettext_lazy as _ + +# Django Rest Framework imports + +# Third party imports + +# Local imports + +user_model = settings.AUTH_USER_MODEL + + +class IsDeletedManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(is_deleted=False) + + +class BaseModel(models.Model): + """ + Tracks instance creations, updates, and (soft) deletions. + """ + + uuid = models.UUIDField( + verbose_name=_("UUID"), unique=True, default=uuid.uuid4, editable=False + ) + + created_by = models.ForeignKey( + to=user_model, + verbose_name=_("Created by"), + null=True, + blank=True, + related_name="%(class)s_created", + on_delete=models.SET_NULL, + ) + + created_at = models.DateTimeField( + verbose_name=_("Created at"), + auto_now_add=True, + editable=False, + db_index=True, + ) + + updated_by = models.ForeignKey( + to=user_model, + verbose_name=_("Updated by"), + null=True, + blank=True, + related_name="%(class)s_updated", + on_delete=models.SET_NULL, + ) + + updated_at = models.DateTimeField( + verbose_name=_("Updated at"), + auto_now=True, + null=True, + blank=True, + ) + + deleted_by = models.ForeignKey( + to=user_model, + verbose_name=_("Deleted by"), + null=True, + blank=True, + related_name="%(class)s_deleted", + on_delete=models.SET_NULL, + ) + + deleted_at = models.DateTimeField( + verbose_name=_("Deleted at"), null=True, blank=True, default=None + ) + + is_deleted = models.BooleanField(verbose_name=_("Is deleted"), default=False) + + objects = IsDeletedManager() + + objects_all = models.Manager() + + class Meta: + abstract = True