我的网站有许多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