В Django, как можно переопределить функцию delete () объекта? - PullRequest
1 голос
/ 13 июня 2011

Я пытаюсь создать приложение, в котором пользователи заблокированы от входа в систему из-за слишком большого количества неудачных попыток входа в систему.

С этой целью, если в течение 5 минут будет 5 неудачных попыток входа, объект блокировкисоздан, и пользователь деактивирован (is_active = False).

Однако, когда этот объект блокировки удален, пользователь должен немедленно снова стать активным (is_active = True).

КомуДля этого необходимо переопределить функцию delete () для модели блокировки, чтобы активировать пользователя при удалении.Этот код, который, я думаю, следует документации, не работает:

def delete(self):
        self.user.is_active = True
        self.user.save()
        super(Lockout, self).delete()

Мне было интересно, был ли это правильный способ сделать это?

Большое спасибо.

1 Ответ

3 голосов
/ 13 июня 2011

Это правильный способ сделать это. Проблема в том, что вы пытаетесь удалить через QuerySet, что не вызывает методы модели . Вам нужно будет .filter(), а затем выполнить итерацию, вызывая .delete() для каждой модели.

Но, вероятно, было бы проще создать новый аутентификационный бэкэнд , который проверял бы блокировку, вместо того, чтобы проходить через эту акробатику.

...