updated to selfdelete inheritance

This commit is contained in:
2026-04-19 01:36:03 +02:00
parent 043e866ac9
commit 5280a87e8b
7 changed files with 151 additions and 58 deletions

View File

@@ -1,9 +1,24 @@
from django.db import models
from django.utils import timezone
class ActiveManager(models.Manager):
class _QS(models.QuerySet):
def visible_to(self, user):
from account.models import UserBlock
author_field = getattr(self.model, 'AUTHOR_FIELD', 'author')
blocked_ids = UserBlock.objects.filter(blocker=user).values_list('blocked_id', flat=True)
blocking_ids = UserBlock.objects.filter(blocked=user).values_list('blocker_id', flat=True)
return (
self.exclude(**{f'{author_field}__in': blocked_ids})
.exclude(**{f'{author_field}__in': blocking_ids})
)
def get_queryset(self):
return super().get_queryset().filter(is_deleted=False)
return self._QS(self.model, using=self._db).filter(is_deleted=False)
class AllManager(models.Manager):
def get_queryset(self):
@@ -18,11 +33,6 @@ class SoftDeleteModel(models.Model):
is_deleted = models.BooleanField(default=False)
deleted_at = models.DateTimeField(null=True, blank=True)
def delete(self, using=None, keep_parents=False):
self.is_deleted = True
self.deleted_at = timezone.now()
self.save()
objects = ActiveManager()
all_objects = AllManager()
@@ -30,32 +40,9 @@ class SoftDeleteModel(models.Model):
abstract = True
def delete(self, *args, **kwargs):
# Soft delete self
self.is_deleted = True
self.deleted_at = timezone.now()
self.save()
def hard_delete(self, using=None, keep_parents=False):
super().delete(using=using, keep_parents=keep_parents)
# SiteSettings model for managing site-wide settings
"""class SiteSettings(models.Model):
bank = models.CharField(max_length=100, blank=True)
support_email = models.EmailField(blank=True)
logo = models.ImageField(upload_to='settings/', blank=True, null=True)
def __str__(self):
return "Site Settings"
class Meta:
verbose_name = "Site Settings"
verbose_name_plural = "Site Settings"
@classmethod
def get_solo(cls):
obj, created = cls.objects.get_or_create(id=1)
return obj
"""
super().delete(using=using, keep_parents=keep_parents)