【问题标题】:"Didn't return an HttpResponse object. It returned None instead" on POST request“没有返回 HttpResponse 对象。它返回 None 而是”在 POST 请求中
【发布时间】:2018-08-23 07:46:10
【问题描述】:

我正在尝试将下拉表单中的选择作为 POST 请求传递到视图中,然后使用此选择从 django 查询一些数据。然后,我使用这些查询尝试遵循this 方法将 django 模型数据映射到 highcharts。问题是我在提交表单时收到“视图 properties.views.property_list 没有返回 HttpResponse 对象。它返回 None ”错误。我已经查看了关于 SO 的类似问题,但似乎没有一个解决方案适用/适用于我的情况。也许我的表格无效,但我不确定是什么导致了这种情况。下面是我写的代码:

views.py

def property_list(request):

if request.user.is_authenticated():
    current_user_groups = Group.objects.filter(id__in=request.user.groups.all())
    current_user_properties = Property.objects.filter(groups__in=current_user_groups)
    current_user_meters = Meter.objects.filter(meter_id__in=current_user_properties)
    property_meter_data = MeterData.objects.filter(meter__in=current_user_meters)

    class AccountSelectForm(forms.Form):
        accounts = forms.ModelChoiceField(queryset=current_user_meters)
        accounts.widget.attrs.update({'class' : 'dropdown-content'})

    form = AccountSelectForm()

    if request.method == "POST":
        if form.is_valid():
            selection = form.cleaned_data['accounts']

            current_user_groups = Group.objects.filter(id__in=request.user.groups.all())
            current_user_properties = Property.objects.filter(groups__in=current_user_groups)
            current_user_meters = Meter.objects.filter(meter_id__in=current_user_properties)

            selected_meters = Meter.objects.filter(name=selection)
            selected_meter_data = MeterData.objects.filter(name=selection)

            usage_data = {'usage': [], 'dates': []}

            for meter in selected_meter_data:
                usage_data['usage'].append(meter.usage)
                usage_data['dates'].append(meter.usage)

            # data passing for usage chart

            usage_xAxis = {"title": {"text": 'Date'}, "categories": usage_data['dates']}
            usage_yAxis = {"title": {"text": 'Usage'}, "categories": usage_data['usage']}
            usage_series = [
                {"data": usage_data['usage']},
            ]

            return HttpResponseRedirect('properties/property-selected.html', {
                'form': form,
                'usage_xAxis': usage_xAxis, 
                'usage_yAxis': usage_yAxis, 
                'usage_series': usage_series,
                'current_user_meters': current_user_meters,
                'selection': selection,
                'selectected_meters': selected_meters,
                'selected_meter_data': selected_meter_data,
            })

    else:

        current_user_groups = Group.objects.filter(id__in=request.user.groups.all())
        current_user_properties = Property.objects.filter(groups__in=current_user_groups)
        current_user_meters = Meter.objects.filter(meter_id__in=current_user_properties)
        property_meter_data = MeterData.objects.filter(meter__in=current_user_meters)

        return render(request, 'Properties/properties.html',{
        'form': form,
        'current_user_groups': current_user_groups,
        'current_user_properties': current_user_properties,
        'current_user_meters': current_user_meters,
        'property_meter_data': property_meter_data
    })

else:

    # If the usre isn't authenticated, the user is redirected to the Sign-n Page

    return render(request, 'SignIn/SignInPage.html')

模板.html

<!-- Query based content for dropdown menu -->
<form method="POST" action="" id="property-select">
    {% csrf_token %}
    {{ form.accounts }}
    <input type="submit" value="Submit" class="submit-button" style="margin-top:30px;"/>
</form>

【问题讨论】:

  • 当请求方式为 POST 时,应使用form = AccountSelectForm(request.POST) 实例化表单。目前,表单没有绑定任何数据,所以它永远不会有效。
  • 就是这样!非常感谢!

标签: python html css django


【解决方案1】:

如果 method=='POST' 并且您的表单无效,则不会返回任何内容。

【讨论】:

  • 感谢您的回复!我已经编辑以添加模板中的代码,知道为什么我的表单无效吗?我不知道为什么会这样。
  • 你为什么不在模板中显示表单错误,然后你(和用户)就会知道为什么它是无效的。
猜你喜欢
  • 2019-10-13
  • 2019-06-12
  • 2016-08-08
  • 2020-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多