2011-06-13 299 views
1

我正在尝试创建一个应用程序,用户因登录尝试失败次数过多而无法登录。在Django中,如何重写对象的delete()函数?

为此,如果在5分钟内有5次登录失败,则会创建一个锁定对象,并停用用户(is_active = False)。

但是,当此Lockout对象被删除时,用户应立即再次激活(is_active = True)。

为此,我必须重写Lockout模型的delete()函数,以便在删除时激活用户。此代码,我认为下面的文档,不起作用:

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

我想知道这是否是正确的方法来做到这一点?

非常感谢。

回答

3

这是正确的做法。您遇到的问题是您尝试通过QuerySet删除,其中未调用模型方法。您需要登录.filter(),然后遍历每个模型调用.delete()

但它可能更容易create a new auth backend检查锁定,而不是通过这些杂技。

+0

谢谢!这就说得通了;通过管理界面删除不会调用models.py中的自定义delete()函数。 – dangerChihuahua007 2011-06-13 20:58:01

相关问题