【问题标题】:How to change the user display name to their first name in Django如何在 Django 中将用户显示名称更改为他们的名字
【发布时间】:2021-04-09 07:10:51
【问题描述】:

我正在使用来自 from django.contrib.auth.models import User 的 Django 内置用户身份验证系统。而且我意识到在管理页面中它总是显示用户的用户名。是否可以更改该函数的def __str__ (self): 方法以显示自定义的方法,类似于这样。

def __str__ (self):
    return f"{self.first_name}"

【问题讨论】:

  • 请重新格式化您的问题,并添加您想要更改的管理员部分的屏幕截图?因为它在我的管理员登录页面中显示名字而不是用户名。
  • 如果你想在除 django 管理面板之外的任何地方显示该名称。使用user.firat_name。但是对于 django doc 所说的更多编码,您应该在 djangos 用户模型上覆盖用户模型,然后覆盖该类的 str 方法。

标签: python django django-users


【解决方案1】:

对于任何此类更改,您应该参考呈现它的模板。这里是 Django Admin 的 base.html 模板。

正如您在 this line in the file 中看到的那样,它按此顺序搜索 short_nameuser_name 并显示第一个可用的。

{% block welcome-msg %}
    {% translate 'Welcome,' %}
    <strong>
        {% firstof user.get_short_name user.get_username %}
    </strong>.
{% endblock %}

get_short_name 返回用户的名字。因此,您的用户没有定义他们的名字,因此它显示了他们的用户名。

注意:请查看您的 Django 版本的文档,因为这是在 1.5 及更高版本之后实现的,并且仅对更高版本有效。

【讨论】:

    【解决方案2】:

    我强烈推荐extend the auth user model,因此您迟早可以进行大量自定义


    您可以使用lambda函数将auth用户的__str__()方法修改为

    from django.contrib.auth.models import User
    
    User.__str__ = lambda user_instance: user_instance.first_name
    

    注意:这个 sn-p 应该在 Django 服务器初始化时执行

    如果您尝试更改显示在右上角的 用户名(如 @amit sigh 所述),请将 lambda 函数设置为 get_short_name强>如,

    from django.contrib.auth.models import User
    
    User.get_short_name = lambda user_instance: f"Prefix : {user_instance.first_name} : Suffix"
    

    【讨论】:

    • 我认为扩展 User 模型对这个特定的用例没有帮助。
    • 你能解释一下为什么吗? OP想要自定义内置User模型__str__()(不是吗?)扩展模型肯定 i> 让您更好地控制模型@AmitSingh
    • OP 想要更改管理控制台页面右上角显示的名称。扩展 User 模型对此无济于事。
    • top-r-c 的事情并没有出现在我的脑海中,这也是一种可能,但他的 OP 有点令人困惑。另外,我非常不同意您的论点“扩展用户模型对此无济于事”,因为您将能够覆盖您的get_short_name 方法自定义模型和 Django 将使用自定义方法而不是内置的 @AmitSingh
    • 您不需要覆盖get_short_name,因为它在实现中返回名字。 docs.djangoproject.com/en/dev/ref/contrib/auth/…
    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多