首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django错误:没有返回HttpResponse对象。相反,它返回None

Django错误:没有返回HttpResponse对象。相反,它返回None
EN

Stack Overflow用户
提问于 2019-12-28 07:43:58
回答 1查看 1.3K关注 0票数 0

我有以下表格:

代码语言:javascript
复制
class PrestataireProfilForm(forms.ModelForm):
    class Meta:
        model = Prestataire
        fields = ["user", "name", "address", "phone", "fax", "city"]

    def __init__(self, *args, **kwargs):
        super(PrestataireProfilForm, self).__init__(*args, **kwargs)
        self.fields['city'].widget.attrs.update({'class' : 'custom-select'})
        self.fields['city'].label = ""

这是我的观点:

代码语言:javascript
复制
@login_required
def prestataire_profil(request):
    prestataire = Prestataire.objects.filter(user=request.user).first()
    is_prestataire = request.user.groups.filter(name='Prestataire').exists()
    form = PrestataireProfilForm(request.POST or None, instance=prestataire)
    if request.method == 'POST':
        context = {
            'profil': prestataire,
            'is_prestataire': is_prestataire,
            'form': form
        }
        if form.is_valid():
            prestataire = form.save(commit=False)
            prestataire.save()
            context = {
            'profil': prestataire,
            'is_prestataire': is_prestataire
            }
            # return render(request, 'dashboard/prestataires/profil.html', context)
            return redirect('prestataire_profil')
    else:
        context = {
            'profil': prestataire,
            'is_prestataire': is_prestataire,
            'form': form
        }
        return render(request, 'dashboard/prestataires/profil.html', context)

这是我的html表单:

代码语言:javascript
复制
<form method='POST'>
                {% csrf_token %}
                <div class="form-group row">
                  <label for="name" class="col-4 col-form-label">Nom d'utilisateur</label> 
                  <div class="col-8">
                    <input value="{{ profil.user.username }}" id="name" name="name" placeholder="Nom d'utilisateur" class="form-control here" required="required" type="text" disabled>
                  </div>
                </div>
                <div class="form-group row">
                  <label for="name" class="col-4 col-form-label">Nom*</label> 
                  <div class="col-8">
                    <input value="{{ profil.user.last_name }}" id="name" name="name" placeholder="Nom" class="form-control here" required="required" type="text">
                  </div>
                </div>
                <div class="form-group row">
                  <label for="name" class="col-4 col-form-label">Prénom*</label> 
                  <div class="col-8">
                    <input value="{{ profil.user.first_name }}" id="name" name="name" placeholder="Prénom" class="form-control here" required="required" type="text">
                  </div>
                </div>
                <div class="form-group row">
                  <label for="name" class="col-4 col-form-label">Raison sociale*</label> 
                  <div class="col-8">
                    <input value="{{ profil.name }}" id="name" name="name" placeholder="Raison sociale" class="form-control here" required="required" type="text">
                  </div>
                </div>
                <div class="form-group row">
                  <label for="address" class="col-4 col-form-label">Adresse</label> 
                  <div class="col-8">
                    <input value="{{ profil.address }}" id="address" name="address" placeholder="Adresse" class="form-control here" type="text">
                  </div>
                </div>
                <div class="form-group row mb-0">
                  <label for="address" class="col-4 col-form-label">Ville</label> 
                  <div class="col-8">
                    {{ form.city|as_crispy_field }}
                  </div>
                </div>
                <div class="form-group row">
                  <label for="phone" class="col-4 col-form-label">Téléphone</label> 
                  <div class="col-8">
                    <input id="phone" name="phone" placeholder="Téléphone" class="form-control here" type="text">
                  </div>
                </div>
                <div class="form-group row">
                  <label for="fax" class="col-4 col-form-label">Fax</label> 
                  <div class="col-8">
                    <input value="" id="fax" name="fax" placeholder="Fax" class="form-control here" type="text">
                  </div>
                </div>
                <div class="form-group row">
                  <div class="offset-4 col-8">
                    <button name="submit" type="submit" class="btn btn-primary">Update My Profile</button>
                  </div>
                </div>
              </form>

当我单击submit按钮时,会出现以下错误:

异常类型: ValueError异常值:视图dashboard.views.prestataire_profil未返回HttpResponse对象。相反,它返回None。

数据不会改变,并且没有任何关于调试的信息来查看哪里出了问题。正如您在视图中注意到的,我注释了return render行。我把它改成了返回重定向,但是同样的问题!请帮帮我!谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-12-28 07:54:21

干杯!

我认为你的表格是无效的(你检查过了吗?)您处理了if form.is_valid()这个案例,但如果不是呢?那你就什么都不会返还!因此,如果在所有情况下都要重定向到prestataire_profil,则应执行以下操作:

代码语言:javascript
复制
@login_required
def prestataire_profil(request):
    [...]
    if request.method == 'POST':
        [...]
        if form.is_valid():
            [...] # do your stuff 
            # return redirect('prestataire_profil') <--- wrong indentation
        return redirect('prestataire_profil') # <--- there, it will return something anyway
    else:
        [...]
        return render(request, 'dashboard/prestataires/profil.html', context)

使用try... except... finally...语句会更好,因为这样做不会阻止您返回None而不是预期的HttpResponse object

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59507026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档