Python 视图没有';t返回HttpResponse对象

Python 视图没有';t返回HttpResponse对象,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我希望用户被重定向到一个表单,允许他们编辑他们的账单详细信息。但是,当我尝试单击链接转到账单表单时,我收到以下错误消息: ValueError: The view classroom.views.teachers.payment_view didn't return an HttpResponse object. It returned None instead. 这是我的看法: def payment_view(request): user = request.user fo

我希望用户被重定向到一个表单,允许他们编辑他们的账单详细信息。但是,当我尝试单击链接转到账单表单时,我收到以下错误消息:

ValueError: The view classroom.views.teachers.payment_view didn't return an HttpResponse object. It returned None instead.
这是我的看法:

def payment_view(request):
    user = request.user
    form = MentorProfileForm()
    if request.method == 'POST':
        form = MentorProfileForm(request.POST, request.FILES, instance=user)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('%s' % (reverse('teachers:payment_view')))
        else:
            form = MentorProfileForm(instance=user)
        return render(request, 'classroom/teachers/app-instructor-billing.html', {'form': form})
models.py

class Mentor(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='mentor')
    linkedin = models.URLField(max_length=200,null=True,blank=True)
    photo = models.ImageField(null=True, blank=True, upload_to='media', default='default.jpg')
    address = models.CharField(max_length=500, null=True, blank=True)
    invoice_name = models.CharField(max_length=200, null=False, blank=False)
    account_num = models.IntegerField(default=1234)
    bank_name = models.CharField(max_length=50, null=False)
    branch_code = models.IntegerField(default=1234)

    def __str__(self):
        return "Profile of user {}".format(self.user.username)
forms.py:这些字段出现在注册表单中

class TeacherSignUpForm(UserCreationForm):
    email = forms.EmailField(max_length=100)
    first_name = forms.CharField(max_length=100)
    last_name = forms.CharField(max_length=100)
    linkedin = forms.URLField(max_length=200)
    address = forms.CharField(max_length=500)
    invoice_name = forms.CharField(max_length=200)
    account_num = forms.IntegerField()
    bank_name = forms.CharField(max_length=50)
    branch_code = forms.IntegerField()

    class Meta(UserCreationForm.Meta):
        model = User
        fields = ('email', 'username', 'first_name', 'last_name')

    def save(self, commit=True):
        self.instance.is_teacher = True
        user = super(UserCreationForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.save()
        mentor = Mentor.objects.get_or_create(
            user=user,
            linkedin=self.cleaned_data['linkedin'],
            address=self.cleaned_data['address'],
            invoice_name=self.cleaned_data['invoice_name'],
            account_num=self.cleaned_data['account_num'],
            bank_name=self.cleaned_data['bank_name'],
            branch_code=self.cleaned_data['branch_code'],
        )
        return user
这是模板

<form id="edit-payment-details", method="post", enctype="multipart/form-data" class="form-horizontal">
                        {% csrf_token %}
                      <div class="form-group">
                        <label for="name" class="col-md-2 control-label">Name on Invoice</label>
                        <div class="col-md-6">
                          <div class="form-control-material">
                            <input type="text" class="form-control used" id="name" value="{{ paymentform.invoice_name }}">
                              {{ paymentform.invoice_name }}
                            <label for="invoice_name"></label>
                          </div>
                        </div>
                      </div>
                      <div class="form-group">
                        <label for="address" class="col-md-2 control-label">Address</label>
                        <div class="col-md-6">
                          <div class="form-control-material">
                            <textarea class="form-control used" id="address"> </textarea>
                              {{ paymentform.address }}
                            <label for="address">Address</label>
...

{%csrf_令牌%}
发票上的姓名
{{paymentform.invoice_name}
地址
{{paymentform.address}
地址
...

您的
else
if form.is\u valid()
子句下,而不是在
if request.method==“POST”子句下。您可以使用以更方便的方式执行重定向:

from django.shortcuts import redirect

def payment_view(request):
    if request.method == 'POST':
        form = MentorProfileForm(request.POST, request.FILES, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('teachers:payment_view')
    else:
        form = MentorProfileForm(instance=request.user)
    return render(request, 'classroom/teachers/app-instructor-billing.html', {'form': form})
从django.shortcuts导入重定向
def付款视图(请求):
如果request.method==“POST”:
form=MentorProfileForm(request.POST,request.FILES,instance=request.user)
如果form.is_有效():
form.save()
返回重定向('teachers:payment\u view')
其他:
form=MentorProfileForm(实例=request.user)

return render(request,'school/teachers/app-teacher-billing.html',{'form':form})
您的
else
范围在
if-form.is\u valid()
子句下,而不是
if-request.method='POST'
子句下。您可以使用以更方便的方式执行重定向:

from django.shortcuts import redirect

def payment_view(request):
    if request.method == 'POST':
        form = MentorProfileForm(request.POST, request.FILES, instance=request.user)
        if form.is_valid():
            form.save()
            return redirect('teachers:payment_view')
    else:
        form = MentorProfileForm(instance=request.user)
    return render(request, 'classroom/teachers/app-instructor-billing.html', {'form': form})
从django.shortcuts导入重定向
def付款视图(请求):
如果request.method==“POST”:
form=MentorProfileForm(request.POST,request.FILES,instance=request.user)
如果form.is_有效():
form.save()
返回重定向('teachers:payment\u view')
其他:
form=MentorProfileForm(实例=request.user)

返回呈现(请求“教室/teachers/app讲师billing.html”,{'form':form})
if form.is\u valid()下写入
else
,它应该写在
if request.method==“POST”
@WillemVanOnsem你应该把这个作为答案发布
否则
写在
if form.is_valid()
下,它应该写在
if request.method==“POST”
@WillemVanOnsem你应该把这个作为答案发布谢谢。获取错误\uuuu init\uuuuuu()在我根据更新视图时获得了意外的关键字参数“instance”this@Emm:那么您的
MentoProfileForm
可能不是
ModelForm
。谢谢。获取错误\uuuu init\uuuuuu()在我根据更新视图时获得了意外的关键字参数“instance”this@Emm:那么您的
MentoProfileForm
可能不是
ModelForm