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

Django星级评分反馈表单提交数据无法存入数据库问题排查

故障根因
  • 模型定义语法错误:models.py中rating、feedBACK两个字段没有缩进至ProductREVIEWS类内部,Django无法识别这两个模型字段,数据库表本身结构异常,无法正常写入数据。
  • 字段名三方不匹配:forms.py定义的评分字段名为rating,但模板内评分单选框的name属性为product_rating,视图层读取校验后数据也用的product_rating作为key,三者名称不统一直接导致表单校验拿不到评分值,根本走不到入库逻辑。
  • 字段类型不匹配:模型层rating为整数类型,但表单层将其定义为字符类型,没有做数值范围和类型校验,即使拿到值也可能因类型不兼容写入失败。
  • 表单提交地址无效:模板中form标签的action属性值为#!,提交请求无法路由到对应的入库视图函数。
  • 缺失提交控件:贴出的模板代码中未放置表单提交按钮,用户无法正常触发提交动作。
分步修复方案

1. 修复模型层(models.py)

修正类内字段缩进,确保字段归属模型类,修改后执行数据库迁移同步表结构:

from django.db import models

class ProductREVIEWS(models.Model):
    # 注意类下字段必须保持4空格缩进
    rating = models.IntegerField(blank=True, null=True)
    feedBACK = models.TextField(blank=True, null=True)

修改完成后在项目根目录执行以下命令同步表结构:
python manage.py makemigrations
python manage.py migrate

2. 修复表单层(forms.py)

统一评分字段名为product_rating和模板、视图保持一致,将字段类型改为整数型,添加1-5分的范围校验:

from django import forms

class FeedBackForm(forms.Form):
    feedBACK = forms.CharField(widget=forms.Textarea, required=True)
    product_rating = forms.IntegerField(
        min_value=1,
        max_value=5,
        required=True
    )

3. 修复视图层(views.py)

添加提交成功后的跳转逻辑避免重复提交,可按需增加评价关联的商品、用户字段赋值:

from django.shortcuts import render, redirect, get_object_or_404
from .models import ProductREVIEWS
from .forms import FeedBackForm

def quick_view(request, quick_view_id):
    # 若需关联评价对应商品,可解开下面注释
    # product = get_object_or_404(Product, id=quick_view_id)
    form = FeedBackForm()
    if request.method == "POST" and request.user.is_authenticated:
        form = FeedBackForm(request.POST)
        if form.is_valid():
            ProductREVIEWS.objects.create(
                feedBACK=form.cleaned_data.get('feedBACK'),
                rating=form.cleaned_data.get('product_rating'),
                # 按需开启关联字段
                # product=product,
                # user=request.user
            )
            # 提交成功后刷新当前页,避免重复提交
            return redirect(request.path)
        # 调试阶段可解开下面注释打印校验错误,快速定位问题
        # print(form.errors)
    return render(request, '你的模板文件路径.html', {'form': form})

4. 修复模板层

修正表单提交地址为对应视图的路由,添加表单错误提示和提交按钮,移除textarea上无效的type属性:

<!-- action替换为你项目中quick_view路由的url标签写法 -->
<form action="{% url 'quick_view' quick_view_id %}" method="POST" class="needs-validation mt-3" style="font-size: 13px;" novalidate autocomplete="off">
    {% csrf_token %}
    <!-- 表单错误提示,方便定位校验问题 -->
    {% if form.errors %}
    <div class="alert alert-danger">
        {% for field in form %}
            {% for error in field.errors %}
                <p>{{ field.label }}:{{ error }}</p>
            {% endfor %}
        {% endfor %}
    </div>
    {% endif %}

    <div class="radio-toolbar d-flex">
        <input type="radio" id="one_star" name="product_rating" value="1" checked>
        <label for="one_star" class="mx-1">1 <i class="fas fa-star"></i></label>

        <input type="radio" id="two_star" name="product_rating" value="2">
        <label for="two_star" class="mx-1">2 <i class="fas fa-star"></i></label>

        <input type="radio" id="three_star" name="product_rating" value="3">
        <label for="three_star" class="mx-1">3 <i class="fas fa-star"></i></label>

        <input type="radio" id="four_star" name="product_rating" value="4">
        <label for="four_star" class="mx-1">4 <i class="fas fa-star"></i></label>

        <input type="radio" id="five_star" name="product_rating" value="5">
        <label for="five_star" class="mx-1">5 <i class="fas fa-star"></i></label>
    </div>

    <div class="mb-3 mt-2">
        <textarea id="feedback" placeholder="Share your experience..." rows="10" style="font-size: 13px; text-transform: lowercase;" class="form-control" name="feedBACK" required></textarea>
     </div>
    <!-- 新增提交按钮 -->
    <button type="submit" class="btn btn-primary">提交反馈</button>
</form>
验证步骤
  • 打开浏览器开发者工具,提交表单时查看网络请求的POST载荷,确认feedBACK和product_rating两个参数值正常携带
  • 若仍写入失败,打开视图中打印form.errors的注释,重启服务后提交,查看控制台输出的校验错误信息针对性修复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:48:16