Функция удаления блокировки () - Django

Есть ли возможность отключить функцию удаления в объекте проекта, если неадминистративный пользователь попытается сделать это через функцию delete?

Например:

class Product(models.Model):
    name = models.CharField(max_lenght=200)
    show = models.BooleanField()
    logs = models.TextField()

А теперь если у нас в коде проекта product.delete() мы блокируем его через свойство модели и проверяем, является ли он администратором, если не является, то добавляем отражение в поле:

class Product(models.Model):
    name = models.CharField(max_lenght=200)
    show = models.BooleanField(default=True)
    logs = models.TextField()

    def delete(self, *args, **kwargs):
        super().save(*args, **kwargs)
        if request.user.is_superuser
            Product.delete()
        else:
            show = False
            logs = 'ther user try remove this ads in time: 08.11 04.11.2022'
            save()

В обязанности представления входит проверка того, что пользователь (в request.user) обладает достаточными привилегиями для выполнения запрашиваемой операции. Не существует стандартного способа для метода объекта Django получить текущего пользователя, и программист, имеющий доступ через оболочку Django >>> obj.delete(), должен быть предотвращен другими средствами (например, риском потерять работу). В этом контексте просто нет пользователя, залогиненного в Django, но БД, к которой он имеет доступ, не должна быть производственной.

Можно полностью отключить метод delete() объекта, переведя его в подкласс no-op или вызвав исключение. Удаление такого объекта потребует других средств. Либо полагаться на CASCADE при удалении другого объекта, либо использовать необработанный SQL (команда psql, если PostgreSQL) для удаления его строки данных из таблицы DB.

(Я не делал последнего, но в проекте, над которым я работаю, есть определенные объекты, которые никогда не должны удаляться при любых нормальных обстоятельствах, и для которых не существует представлений удаления или чего-то подобного. Они будут накапливаться со скоростью примерно один в неделю в процессе производства, и удаление полностью устаревших объектов - это проблема, которую можно смело отложить до 2100 года или позже :-)

Вернуться на верх