2009-07-06 46 views
4

我有一个Django应用程序,其活动和对象具有外键给在django.contrib.auth.models中定义的用户对象。在这样做的时候,我得到了用户的username属性,这是登录ID。以django的形式显示全名,而不是用户名

由于User对象存储全名,因此如何在表单上使ChoiceField显示用户的全名,而不是用户名,但在表单被张贴后仍然将其链接回正确的User对象?

回答

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()) 
+0

谢谢 - 正是我在找... – 2009-07-06 15:26:51

0

要添加到以前的答案,如果你试图修改窗体在管理员然后XYZForm类应该继承forms.ModelForm和admin.py你应该做一个XYZAdmin类的形式属性= XYZForm

相关问题