我想在通过管理站点更改密码时结束用户会话(参见屏幕截图)。我做了一项研究,它建议覆盖
save_model
并编写自定义逻辑来结束会话
@admin.register(User)
class UserAdmin(UserAdmin):
def save_model(self, request, obj, form, change):
print("HERE")
...
问题是由于某种原因
save_model
永远不会触发(也尝试过调试)。 User 和 UserAdmin 都已正确注册,否则我什至无法访问更改密码页面。
版本:Django 4
你是对的,因为更改密码是一个敏感操作,显然在
UserAdmin
中,他们为此定义了特殊逻辑[src]:
@admin.register(User) class UserAdmin(admin.ModelAdmin): # … @sensitive_post_parameters_m def user_change_password(self, request, id, form_url=""): # … if request.method == 'POST': form = self.change_password_form(user, request.POST) if form.is_valid(): form.save() # …
因此,为了触发逻辑,您应该子类
cange_password_form
,并重写那里的save()
方法,所以:
from django.contrib.auth.forms import AdminPasswordChangeForm
class AdminPasswordChangeForm(AdminPasswordChangeForm):
def save(self, *args, **kwargs):
print('HERE')
return super().save(*args, **kwargs)
@admin.register(User)
class UserAdmin(UserAdmin):
change_password_form = AdminPasswordChangeForm