Django - 全局修改用户对象的字符串表示(甚至在管理员之外),以便在模型表单中使用



我的网站有许多ModelForms,每当它具有用户模型的外键属性时,显示的属性就是用户名。如何更改它,使表示形式改为用户的全名(或其他名称(?我最好寻找一个全局解决方案,从这里开始适用于所有模型表单,但我不会放弃涉及自定义每个表单(而不是更改模型(的修复程序。我正在使用用户模型的用户配置文件扩展。

到目前为止,我尝试的修复程序是取代用户类中的str方法。这是我在模型类上的截图(取自本论坛的条目,顺便说一句(。此代码位于 models.py 文件中:

#CUSTOMIZES REPRESENTATION OF USER
def get_full_name(self):
    return self.first_name + ' ' + self.last_name
User.add_to_class("__str__", get_full_name)

谢谢!

@pgcd建议的自定义用户模型可能是这里的最佳选择。

但是,如果要分别为每个表单自定义它,则可以子类ModelChoiceField并覆盖label_from_instance

class UserModelChoiceField(forms.ModelChoiceField):
    def label_from_instance(self, obj):
        return get_full_name(obj)

然后在表单中使用自定义模型选择字段。

class MyForm(forms.Form):
    user = UserModelChoiceField(queryset=User.objects.all())

您可以简单地使用自定义用户模型,并在自定义模型中根据需要重写 __str__ 方法。例如:

class User(AbstractUser):
    def __str__(self):
        return self.get_full_name()  # get_full_name() is a standard User method

最新更新