2013-12-20 4 views
2

Итак, каждая модель поставляется с некоторыми обычно используемыми функциями, такими как save и delete.Django disable model delete

Удалить часто переопределяется, чтобы установить логическое поле, такое как is_active, на false, таким образом данные не теряются. Но иногда существует модель, которая имеет информацию, которая когда-то создавалась, всегда должна существовать и даже не быть «неактивной». Мне было интересно, что такое лучшая практика для обработки этого метода delete модели будет?

идеи

сделать это просто бесполезно:

def delete(self): 
    return False 

но это только кажется странным. Возможно, есть опция Meta, чтобы отключить удаление? есть ли «хороший» способ сделать это?

ответ

0

Ну, это зависит от того, что вы действительно не можете ограничить удаление, потому что кто-то всегда может позвонить по номеру delete() по запросу или просто в DELETE sql-команде. Если вы хотите отключить кнопку удаления в администраторе django, вы должны посмотреть here.

+0

Администратор Django не имеет к этому отношения. Я знаю, что я не могу избавиться от SQL 'DELETE', но я хочу удалить его из модели и запроса. Единственные люди, которые должны иметь возможность удалить эти экземпляры, - это те, у которых есть доступ к фактической базе данных, но те, у кого есть доступ к запросу django, не должны быть в состоянии –

+1

. Тогда да, переопределите delete на модели и создайте настраиваемый набор запросов с настраиваемым менеджером чтобы отключить это. Вы также хотели бы просмотреть связанные запросы, которые вы можете получить, пройдя отношения. –

+2

А также, если у людей есть доступ к приложению django, разве у них нет доступа к базе данных? Я бы ограничил удаление на уровне БД только администраторами или чем-то еще. –