我有一个Django应用程序,其活动和对象具有django.contrib.auth.models中定义的User对象的外键。在这样做时,我得到用户的username
属性,即登录ID。
由于User对象存储全名,如何在表单上创建ChoiceField显示用户的全名,而不是用户名,但在表单发布后仍将其链接回正确的User对象? / p>
答案 0 :(得分:14)
如果您有一个常规的ChoiceField,但是如果您有一个modelChoiceField,则不能完全确定以下内容是否有效:
class UserModelChoiceField(forms.ModelChoiceField):
"""
Extend ModelChoiceField for users so that the choices are
listed as 'first_name last_name (username)' instead of just
'username'.
"""
def label_from_instance(self, obj):
return "%s (%s)" % (obj.get_full_name(), obj.username)
class XYZForm(forms.Form):
...
xyz = UserModelChoiceField(User.objects.all())
答案 1 :(得分:0)
要添加到上一个答案,如果您尝试修改管理员中的表单,那么XYZForm类应该从forms.ModelForm继承,并且在admin.py中,您应该创建一个表单属性= XYZForm的XYZAdmin类