DJango Model表单显示了user.profile.name信息,而不是user.username

时间:2016-12-12 07:56:43

标签: python django django-forms django-widget

我在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吗?

我该怎么做?

1 个答案:

答案 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>