UserAdmin save_model 未在密码更改时触发

问题描述 投票:0回答:1

我想在通过管理站点更改密码时结束用户会话(参见屏幕截图)。我做了一项研究,它建议覆盖

save_model
并编写自定义逻辑来结束会话

@admin.register(User)
class UserAdmin(UserAdmin):
    def save_model(self, request, obj, form, change):
        print("HERE")
        ...

问题是由于某种原因

save_model
永远不会触发(也尝试过调试)。 User 和 UserAdmin 都已正确注册,否则我什至无法访问更改密码页面。

版本:Django 4

django django-admin
1个回答
0
投票

你是对的,因为更改密码是一个敏感操作,显然在

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
© www.soinside.com 2019 - 2024. All rights reserved.