我在Django中有一个ModelForm用来参加一个活动。它将用户显示为纯文本而不是字段:
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__
似乎我可以使用value
作为Profiles查询集的过滤器在PlainTextWidget.render()中查找它,但是有更直接的方式来访问表单或窗口小部件中的user.profile吗?
我该怎么做?
答案 0 :(得分: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>