【问题标题】:DJango Model form that display's user.profile.name info instead user.username显示 user.profile.name 信息而不是 user.username 的 DJango 模型表单
【发布时间】:2016-12-12 07:56:43
【问题描述】:

我在 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 作为 Profiles 查询集上的过滤器来查找它,但是有没有更直接的方法来访问表单或小部件中的 user.profile?

我该怎么做?

【问题讨论】:

    标签: python django django-forms django-widget


    【解决方案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>
    

    【讨论】:

    • 当您创建表单时,您可能会向表单提供注册实例。如果此实例存在,那么您可以使用 self.instance.student.profile 访问它
    猜你喜欢
    • 2020-08-03
    • 2018-10-21
    • 2015-12-19
    • 2019-09-25
    • 2018-11-30
    • 1970-01-01
    • 2022-10-25
    • 2022-12-09
    • 1970-01-01
    相关资源
    最近更新 更多