2016-12-12 4 views
0

私はイベントに出席するために使用されるDjangoのModelFormを持っています。それは代わりに、フィールドのプレーンテキストとしてユーザーが表示されます。DJango表示のuser.profile.name情報の代わりにuser.usernameという形式のモデル

class PlainTextWidget(forms.Widget): 
    def render(self, name, value, attrs=None): 
     return mark_safe(value) if value is not None else '-' 

class AttendanceForm(forms.ModelForm): 
    class Meta: 
     model = Registration 
     fields = (
      "absent", 
      "late", 
      "excused", 
      "user", # User foreign key 
     ) 

     widgets = { 'student': PlainTextWidget,} 

しかし、代わりにデフォルトでフォームの表示ユーザーのユーザー名を、有するので、私は、ユーザーのプロファイル文字列を表示したいと思います:user.profile.__str__

私はPlainTextWidget.render()でvalueをプロファイルクエリーセットのフィルターとして使用して調べることができるようですが、フォームまたはウィジェットのuser.profileに直接アクセスする方法はありますか?

どうすればいいですか?

答えて

1

あなたは、initメソッドをオーバーライドして、フォームのメンバ変数として学生のプロフィールstrを保存することができます:

class AttendanceForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(AttendanceForm, self).__init__(*args, **kwargs) 
     self.student_string = self.instance.student.profile.__str__() 

をして、フォームのどこかにそれを使用する:私はそこにそれを得るにはどうすればよい

<p>{{ form.student_string }}</p> 
+0

? user.profile .__ str __() – 43Tesseracts

+1

フォームを作成すると、おそらくフォームの登録インスタンスが提供されます。このインスタンスが存在する場合は、self.instance.student.profileでアクセスできます。 –

関連する問題