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>