【问题标题】:How to remove change password link from django admin site?如何从 django 管理站点中删除更改密码链接?
【发布时间】:2025-06-24 19:50:02
【问题描述】:

我正在为我的 django Web 应用程序使用活动目录登录身份验证。所以不需要在管理站点更改密码链接。

我搜索了很多文章,但我没有找到任何隐藏更改密码链接的东西。 那么对管理员隐藏更改密码链接的方法是什么?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    您不需要覆盖管理模板。

    如果user.has_usable_password() 返回False,则Django will not display change password URL for that user

    user.has_usable_password()可以通过调用user.set_unusable_password()返回False

    来自docs

    set_unusable_password()

    将用户标记为未设置密码。这与密码的空白字符串不同。 check_password() 这个用户永远不会返回True。不保存用户对象。

    如果您的应用程序的身份验证是针对现有的外部源(例如 LDAP 目录)进行的,您可能需要这样做。

    has_usable_password()

    如果已为此用户调用了set_unusable_password(),则返回False

    Source code for condition filter in Django base admin template:

    {% if user.has_usable_password %}
        <a href="{% url 'admin:password_change' %}">{% translate 'Change password' %}</a> 
    {% endif %}
    

    【讨论】:

    • 它不起作用。我覆盖了'django_auth_ldap.backend.LDAPBackend'并在那里调用'user.set_unusable_password()'。因此用户'has_usable_password()'返回False,但密码更改区域仍然存在