Python 强制用户模型将自身表示为first_name last_name(如果存在)

Python 强制用户模型将自身表示为first_name last_name(如果存在),python,django,Python,Django,我在我的应用程序中有很多地方显示用户(来自用户模型):模板、表单、传单、表格等。 它在任何地方都显示为用户名 我希望它显示为名/姓 我可以通过猴子修补来做到这一点: @receiver(request_started) def patch(*args, **kwargs): get_user_model().__str__ = my_smart_str_func 我使用“request_started”来确保所有模型都已加载。(顺便说一句,是否有类似“模型加载”的信号?) 不过,我觉得

我在我的应用程序中有很多地方显示用户(来自用户模型):模板、表单、传单、表格等。 它在任何地方都显示为用户名

我希望它显示为名/姓

我可以通过猴子修补来做到这一点:

@receiver(request_started)
def patch(*args, **kwargs):
    get_user_model().__str__ = my_smart_str_func
我使用“request_started”来确保所有模型都已加载。(顺便说一句,是否有类似“模型加载”的信号?)


不过,我觉得有点不舒服。应该有更多的python方法来做到这一点。我错过了什么吗?

你试过了吗,然后覆盖了那里的
\uu str\uuu()
?我的更改是“纯行为的”,所以我需要创建代理,对吗?但在这种情况下,我需要在任何地方使用它,而不是用户。如果我创建自定义类并通过settings.py安装它,它看起来会很奇怪:为什么我需要替换用户模型来更改它的字符串表示形式?是的,这纯粹是行为,所以您需要设置
proxy=True
。我在这里找到了更多的例子:。在您真正尝试之前,我无法确定,但Django在显示模型时非常擅长调用unicode()(如果您使用的是Python 3,则调用str()),无论是在表单、模板、表等中。因此,我认为扩展用户并重写unicode()(Python 2)或str()(Python 3)应该涵盖所有这些情况。从你的描述不确定你到底在做什么,但信号听起来不是正确的方法。就我个人而言,我会尝试通过扩展用户模型来创建自己的用户模型,并重写unicode或str方法来显示用户名。我不喜欢扩展用户模型只是为了更改其字符串表示形式的想法。有了代理,我需要使用这个代理类,而不是我的用户。所以,我和蒙基·帕金在一起。但信号不是个好主意,我将使用
AppConfig.ready()