DJango 模型表单显示 user.profile.name 信息而不是 user.username
DJango Model form that display's user.profile.name info instead user.username
我在 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__
似乎我可以在 PlainTextWidget.render() 中使用 value
作为配置文件查询集的过滤器来查找它,但是是否有更直接的方法来访问 user.profile表单还是小部件?
我该怎么做?
您可以覆盖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>
我在 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__
似乎我可以在 PlainTextWidget.render() 中使用 value
作为配置文件查询集的过滤器来查找它,但是是否有更直接的方法来访问 user.profile表单还是小部件?
我该怎么做?
您可以覆盖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>