在将表单提交到另一个URL进行处理时发生ValueError

时间:2019-07-14 12:21:09

标签: django python-3.x django-models django-forms django-views

我在使用表单“操作”属性将表单提交到其他URL时遇到问题。 我有一个DetailView(如下所示),它显示有关特定教师的信息,例如ProfileView和DetailView呈现的HTML模板包含将由另一个URL /视图处理的表单。

views.py

class TeacherDetail(DetailView):
    model = Teacher
    template_name = ‘teacher_info.html’

user_info.html#显示表单

<form method="POST" action="/inter/account/start/">{%csrf_token%}
<input type="hidden" name="teacher" id="object.id" value="{{object}}">
<button type="submit" name="invite">Invite Teacher</button>
</form>

我的意图是还将对象本身从特定的DetailView发送到将要发送到表单的url,因为表单验证需要它。

views.py#将表单发送到的地方

class MakeInvitation(CreateView):
    model = Invitation
    fields = []

    def form_valid(self, form):
        form.instance.inviter = self.request.user.student
        form.instance.invitee = self.request.POST['teacher']
        return super().form_valid(form)

模型“邀请”只有两个字段,邀请者和被邀请者。我让form.instance.inviter成为当前的学生用户,并且让form.instance.invitee(教师模型的外键)成为了教师,其个人资料页就是表单的来源,所以我尝试使用request.POST以从DetailView页面中的表单获取对象。

我得到一个(ValueError:无法分配“'test one'”:“ Invitation.invitee”必须是“ Teacher”实例。)

1 个答案:

答案 0 :(得分:0)

这里有几个问题。

您没有使用视图或表单的任何功能。您应该将invitee添加到字段列表中,并适当设置隐藏字段的名称。同样,该字段的值必须是教师的ID,而不是其字符串表示形式。因此模板行是:

<input type="hidden" name="invitee" value="{{ object.id }}

视图可以是:

class MakeInvitation(CreateView):
    model = Invitation
    fields = ['invitee']

    def form_valid(self, form):
        form.instance.inviter = self.request.user.student
        return super().form_valid(form)