Django - 全局修改User对象的字符串表示形式(在管理员之外,甚至是在模型表单中)

时间:2018-01-07 00:30:37

标签: python django

我的网站有很多ModelForms,只要它具有User模型的Foreign Key属性,显示的属性就是username。我如何更改它,以便代表是用户的全名(或其他)?我最好寻找一个全局解决方案,从这里开始适用于所有模型表单,但我不会放弃涉及自定义每个表单的修复(而不是更改模型)。我正在使用用户模型的userprofile扩展。

到目前为止,我尝试过的修补程序取代了用户类中的 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)

谢谢!

2 个答案:

答案 0 :(得分:1)

您只需使用custom User model,并在自定义模型中根据需要覆盖distributed by方法。例如:

__str__

答案 1 :(得分:1)

@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())