You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django UserAdmin中配置Staff用户改密的自定义表单?

问题解决方案

一、全局RTL布局下设置部分字段为LTR方向

1. 全局开启RTL

在项目根模板的<html>标签添加dir="rtl"属性,或者通过全局CSS统一设置:

html, body {
    direction: rtl;
}

2. 单独设置字段为LTR

表单字段层面(推荐)

在自定义表单的字段widget中直接指定dir="ltr"属性,精准控制单个字段:

from django import forms

class YourCustomForm(forms.Form):
    # 手机号、邮箱这类需要LTR的字段示例
    phone_number = forms.CharField(
        widget=forms.TextInput(attrs={'dir': 'ltr', 'placeholder': '请输入手机号'})
    )
    email = forms.EmailField(
        widget=forms.EmailInput(attrs={'dir': 'ltr'})
    )

CSS层面兜底

如果需要批量处理同类型字段,可给目标字段添加自定义类,再通过CSS强制设置LTR:

.ltr-field {
    direction: ltr !important;
    text-align: left;
}

之后在表单widget中添加class='ltr-field'即可生效。


二、配置Staff用户在Admin后台改密使用CustomPasswordChangeForm

方法1:通过URL覆盖默认密码更改视图

在项目的urls.py中,将自定义表单绑定到Admin的密码更改URL,需放在默认Admin路由之前:

from django.contrib import admin
from django.contrib.auth import views as auth_views
from .forms import CustomPasswordChangeForm

urlpatterns = [
    # 优先匹配自定义的密码更改路由
    path('admin/password_change/', auth_views.PasswordChangeView.as_view(
        form_class=CustomPasswordChangeForm,
        template_name='admin/password_change.html'  # 复用Admin默认模板
    ), name='admin_password_change'),
    path('admin/', admin.site.urls),
]

方法2:自定义AdminSite类(全局统一配置)

创建自定义AdminSite并重写密码更改视图,替换默认站点:

# yourapp/admin.py
from django.contrib.admin import AdminSite
from django.contrib.auth.views import PasswordChangeView
from .forms import CustomPasswordChangeForm

class CustomAdminSite(AdminSite):
    def password_change_view(self, request, extra_context=None):
        # 调用密码更改视图并指定自定义表单
        return PasswordChangeView.as_view(
            form_class=CustomPasswordChangeForm,
            template_name='admin/password_change.html'
        )(request, extra_context=extra_context)

# 实例化自定义站点
admin_site = CustomAdminSite(name='custom_admin')

随后在项目urls.py中使用该自定义站点:

from yourapp.admin import admin_site

urlpatterns = [
    path('admin/', admin_site.urls),
]

若需全局生效,可在settings.py中更新Admin站点类:

ADMIN_SITE_CLASS = 'yourapp.admin.CustomAdminSite'

注意事项

  • 确保Staff用户拥有auth.change_password权限(默认已分配)
  • CustomPasswordChangeForm需继承Django原生PasswordChangeForm并实现自定义逻辑(如旧密码验证)

内容的提问来源于stack exchange,提问作者Omid Shojaee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:57:15