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

Django报错:'Product'对象无'status_code'属性,表单开发求助

问题分析与修复方案

1. URL配置错误(核心报错原因)

你的urls.py中存在重复路径配置,且第一个路径直接将Product模型类作为视图传入——Django的URL路由要求绑定视图函数/类视图,而非模型类。当请求进入时,Django会尝试调用该模型类作为视图,而模型返回的是Product对象,并非标准HTTP响应,因此会触发'Product' object has no attribute 'status_code'错误。

修复:
删除错误的模型路径配置,保留正确的视图映射:

# urls.py
path('upload_product/', views.uploadProduct, name="upload_product"),
path('', views.upload_product_ok_page, name='upload_product_ok_page'),

2. 模型类冗余方法

models.py中的get方法完全多余,模型类无需此类视图逻辑,直接删除:

# models.py
class Product(models.Model):
    product_name = models.CharField(max_length=100)
    product_price = models.IntegerField()
    product_photo = models.ImageField(upload_to='product_photos', max_length=100)
    # 移除以下冗余方法
    # def get(self, request):
    #     a = Product()
    #     return a

3. Form类字段定义错误

forms.py中直接将字段赋值为控件类(如forms.TextInput())的写法错误,ModelForm中指定控件需通过widget参数:

# forms.py
class UploadProduct(ModelForm):
    class Meta:
        model = Product
        fields = ['product_name', 'product_price', 'product_photo']
        widgets = {
            'product_name': forms.TextInput(),
            'product_price': forms.NumberInput(),
            'product_photo': forms.FileInput(),
        }

4. 视图函数的两处问题

  • 处理文件上传时,POST请求需同时传入request.FILES,否则表单无法接收上传文件
  • GET请求返回表单时,应传入表单实例(UploadProduct()),而非表单类本身

修复:

# views.py
def uploadProduct(request):
    if request.method == 'POST':
        # 传入request.FILES处理文件上传
        form = UploadProduct(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('upload_product_ok_page')  # 使用URL name跳转更可靠
    else:
        # 实例化表单
        form = UploadProduct()
    return render(request, 'upload_product.html', {'form': form})


def upload_product_ok_page(request):
    return HttpResponse('ok')

5. 模板优化(可选)

为了更友好地显示表单和错误提示,可修改模板:

<form method="POST" action="{% url 'upload_product' %}" enctype="multipart/form-data">
{% csrf_token %}
    {% for field in form %}
        <div>
            {{ field.label_tag }}
            {{ field }}
            {% if field.errors %}
                <span style="color: red;">{{ field.errors.0 }}</span>
            {% endif %}
        </div>
    {% endfor %}
    <button>Submit</button>
</form>

完成以上修改后,重新运行项目,表单上传功能即可正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:15:34