Source code for abstract.models

from django.conf import settings
from django.db import models

from abstract.managers import BaseManager
from user.models import User


[docs] class BaseModel(models.Model): """ This is the base class model for all models of the database tables. Attributes: operating_user (object): The user operating on the model instance. objects (BaseManager): The custom manager for BaseModel instances. status (bool): Status of the record (active or not), default is True. created_at (DateTime): Datetime of creation, auto-generated. updated_at (DateTime): Last modification datetime, auto-updated. created_by (ForeignKey): User who created the record. updated_by (ForeignKey): User who last updated the record. Usage: class <CLASS_NAME>(BaseModel): # model definition """ operating_user = None objects = BaseManager() status = models.BooleanField(default=True) created_at = models.DateTimeField(auto_now_add=True, blank=True) updated_at = models.DateTimeField(auto_now=True, blank=True) created_by = models.ForeignKey( "user.User", related_name="%(class)s_created_by", on_delete=models.DO_NOTHING, blank=True, ) updated_by = models.ForeignKey( "user.User", related_name="%(class)s_updated_by", on_delete=models.DO_NOTHING, blank=True, )
[docs] def save(self, *args, **kwargs): """ Save method overridden to set created_by and updated_by fields. """ operating_user = ( self.operating_user if hasattr(self, "operating_user") else None ) self.updated_by = operating_user if not self.pk: self.created_by = operating_user super().save(*args, **kwargs)
[docs] def delete(self, *args, **kwargs): """ Override delete method to set status to False instead of actual deletion. """ self.status = False self.save(*args, **kwargs)
[docs] class Meta: """ Meta class to specify metadata options for the BaseModel. """ abstract = True ordering = ["-updated_at"] if not settings.DEFAULT_PERMISSIONS: default_permissions = []