Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
class SoftDeletionManager(models.Manager): def __init__(self, *args, **kwargs): self.alive_only = kwargs.pop('alive_only', True) super(SoftDeletionManager, self).__init__(*args, **kwargs) def get_queryset(self): if self.alive_only: return SoftDeletionQuerySet(self.model).filter(deleted_at=None) return SoftDeletionQuerySet(self.model) def hard_delete(self): return self.get_queryset().hard_delete() class SoftDeletionQuerySet(QuerySet): def delete(self): date_now = timezone.now() return super(SoftDeletionQuerySet, self).update(deleted_at=date_now) def hard_delete(self): return super(SoftDeletionQuerySet, self).delete() def alive(self): return self.filter(deleted_at=None) def dead(self): return self.exclude(deleted_at=None) class SoftDeletionModel(models.Model): deleted_at = models.DateTimeField(blank=True, null=True) objects = SoftDeletionManager() all_objects = SoftDeletionManager(alive_only=False) class Meta: abstract = True def delete(self): date_now = timezone.now() self.deleted_at = date_now self.save() def hard_delete(self): super(SoftDeletionModel, self).delete() class User(AbstractUser, SoftDeletionModel): phone = models.CharField(verbose_name='Номер телефона - Логин', max_length=20, unique=True, db_index=True) iin = models.CharField(verbose_name="ИИН", max_length=12, unique=True, blank=True) USERNAME_FIELD = 'phone' REQUIRED_FIELDS = ["username"] def __str__(self): return self.phone class Meta: verbose_name = 'Аккаунт' verbose_name_plural = 'Аккаунты' # Модель для TodoList class Todolist(models.Model): user_id = models.ForeignKey('User', on_delete=models.PROTECT, verbose_name='Id пользователя') task = models.TextField(verbose_name='Задача') start_time = models.DateTimeField(verbose_name='Дата начала') end_time = models.DateTimeField(verbose_name='Дата завершения') def __str__(self): return self.user_id class Meta: verbose_name = 'Список задач' verbose_name_plural = 'Список задач' ordering = ['user_id'] # Сортировка в админке
Пользователь помечается как удаленный (ставится дата удаления), но при вызове objects.all() все равно показывается.
Скину код models ниже