我的网站有很多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)
谢谢!
答案 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())