You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django视图报错:inventory_entry未返回HttpResponse对象,返回None

问题解决:Django视图未返回HttpResponse对象

核心错误原因

你的inventory_entry视图在GET请求时没有返回任何HttpResponse对象,导致Django抛出"返回了None"的错误。同时代码还有几处其他问题需要修正:

1. 视图函数逻辑修复

当前视图仅在POST请求分支内有返回逻辑,GET请求进入后会直接走到函数末尾,无返回值。调整后的视图代码如下:

from django.shortcuts import render, redirect
from .models import Location, Inventory
from .forms import DataForm 

def inventory_entry(request):
    # 初始化表单,覆盖GET/POST场景
    form = DataForm()
    if request.method == 'POST':
        form = DataForm(request.POST)
        if form.is_valid():
            # 用解包简化对象创建,减少冗余代码
            Inventory.objects.create(**form.cleaned_data)
            return redirect('data_entry')
    # 所有请求路径(GET/POST验证失败)均返回渲染页面
    locations = Location.objects.all()
    return render(request, "inventory/index.html", {'form':form, 'locations': locations})

2. Models.py缩进错误修正

Location和Inventory类的__str__方法缩进错误,需放在类内部才能成为类方法:

from django.db import models

OFFICE_CHOICES = (
    # 保留原有选项...
)

class Location(models.Model):
    location_name = models.CharField(max_length=20, choices=OFFICE_CHOICES, default='Select the office')
    
    def __str__(self):
        return self.location_name

class Inventory(models.Model):
    location = models.ForeignKey(Location, on_delete=models.CASCADE)
    date = models.DateField()
    description = models.CharField(max_length=30)
    in_use = models.PositiveIntegerField()
    training_room = models.PositiveIntegerField()
    conference_room = models.PositiveIntegerField()
    gsm_office = models.PositiveIntegerField()
    prospecting_station = models.PositiveIntegerField()
    applicant_station = models.PositiveIntegerField()
    visitor_station = models.PositiveIntegerField()
    other = models.PositiveIntegerField()
    spare_on_floor = models.PositiveIntegerField()
    spare_storage = models.PositiveIntegerField()
    total_spare = models.PositiveIntegerField()
    broken = models.PositiveIntegerField()
    total = models.PositiveIntegerField()
    
    def __str__(self):
        return f"Data for location {self.location} on {self.date}"

3. 表单优化(可选)

将表单内数字字段设置为非负输入,与模型字段规则保持一致:

from django import forms
from .models import Location

class DataForm(forms.Form):
    location = forms.ModelChoiceField(queryset=Location.objects.all())
    date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))  # 增加原生日期选择器
    description = forms.CharField(widget=forms.Textarea)
    in_use = forms.IntegerField(min_value=0)
    training_room = forms.IntegerField(min_value=0)
    conference_room = forms.IntegerField(min_value=0)
    gsm_office = forms.IntegerField(min_value=0)
    prospecting_station = forms.IntegerField(min_value=0)
    applicant_station = forms.IntegerField(min_value=0)
    visitor_station = forms.IntegerField(min_value=0)
    other = forms.IntegerField(min_value=0)
    spare_on_floor = forms.IntegerField(min_value=0)
    spare_storage = forms.IntegerField(min_value=0)
    total_spare = forms.IntegerField(min_value=0)
    broken = forms.IntegerField(min_value=0)
    total = forms.IntegerField(min_value=0)

验证修复效果

  1. 启动Django服务器后访问对应URL,GET请求会正常渲染表单页面
  2. 提交有效数据会跳转到data_entry页面,提交无效数据会重新渲染带错误提示的表单
  3. 库存数据会正确关联到选中的Location对象

内容的提问来源于stack exchange,提问作者DaHawg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:35:17