5.16. Models Abstract¶
>>>
... class BaseModel(models.Model):
... class Meta:
... abstract = True
5.16.1. Use Case - 0x01¶
>>>
... class BaseModel(models.Model):
... uuid = models.UUIDField(verbose_name=_('Unique UUID'), unique=True, null=False, blank=False, default=uuid4, editable=False)
... creation_author = models.ForeignKey(verbose_name=_('Creation Author'), to='auth.User', null=True, blank=True, default=None, on_delete=models.SET_NULL, related_name='creation_author')
... creation_date = models.DateTimeField(verbose_name=_('Creation Date'), auto_now_add=True, editable=False)
... modification_date = models.DateTimeField(verbose_name=_('Modification Date'), auto_now=True)
... modification_author = models.ForeignKey(verbose_name=_('Modification Author'), to='auth.User', null=True, blank=True, default=None, on_delete=models.SET_NULL, related_name='modification_author')
... ip_address = models.GenericIPAddressField(verbose_name=_('IP Address'), null=True, blank=True, default=None, editable=False)
...
... class Meta:
... abstract = True
5.16.2. Use Case - 0x02¶
>>>
... import logging
... from uuid import uuid4
... from django.db import models
... from django.utils.translation import gettext_lazy as _
...
...
... class Manager(models.Manager):
... def get_queryset(self):
... return super().get_queryset().filter(is_deleted=False)
...
...
... class BaseModel(models.Model):
... uuid = models.UUIDField(verbose_name=_('UUID'), null=False, blank=False, editable=False, default=uuid4, help_text=_('Object Unique Identifier'))
... created_user = models.ForeignKey(verbose_name=_('Created User'), related_name='+', to='auth.User', null=True, blank=True, on_delete=models.SET_NULL, help_text=_('User'))
... created_date = models.DateTimeField(verbose_name=_('Created Date'), null=False, blank=False, auto_now_add=True, help_text=_('UTC Date and Time'))
... modified_user = models.ForeignKey(verbose_name=_('Modified User'), to='auth.User', related_name='+', null=True, blank=True, on_delete=models.SET_NULL, help_text=_('User'))
... modified_date = models.DateTimeField(verbose_name=_('Modified Date'), null=False, blank=False, auto_now=True, help_text=_('UTC Date and Time'))
... is_deleted = models.BooleanField(verbose_name=_('Is Deleted?'), null=False, blank=False, default=False, help_text=_('Is record deleted?'))
... comment = models.TextField(verbose_name=_('Comment'), null=True, blank=True, default=None, help_text=_('Additional Comments'))
...
... objects = Manager()
...
... def log(self, message: str, level: int | str = logging.INFO):
... log = logging.getLogger(self.__class__.__name__)
... log.log(level, message)
...
... class Meta:
... abstract = True
... ordering = ['-created_date']
... verbose_name = _('Base Model')
... verbose_name_plural = _('Base Models')
5.16.3. Use Case - 0x03¶
>>>
... from uuid import uuid4
... from django.contrib import admin
... from django.db import models
...
...
... class NotDeletedManager(models.Manager):
... def get_queryset(self):
... qs = super().get_queryset()
... return qs.filter(is_deleted=False)
...
...
... class BaseModel(models.Model):
... uuid = models.UUIDField(verbose_name='UUID', null=False, blank=False, editable=False, default=uuid4)
... add_date = models.DateTimeField(verbose_name='Add Date', auto_now_add=True, null=False, blank=False)
... add_user = models.ForeignKey(verbose_name='Add User', to='auth.User', on_delete=models.SET_NULL, related_name='%(class)s_add_user', null=True, blank=True, editable=False)
... edit_date = models.DateTimeField(verbose_name='Edit Date', auto_now=True, null=False, blank=False)
... edit_user = models.ForeignKey(verbose_name='Edit User', to='auth.User', on_delete=models.SET_NULL, related_name='%(class)s_edit_user', null=True, blank=True, editable=False)
... is_deleted = models.BooleanField(verbose_name='Is Deleted?', null=False, blank=False, editable=False, default=False)
...
... objects = NotDeletedManager()
...
... class Meta:
... abstract = True