如何触发Django视图函数addItem以保存弹窗表单数据至SQLite
解决Django弹窗表单提交触发视图的问题
核心问题及修改步骤
要让弹窗表单提交时触发views.addItem函数,需要修正以下几处代码:
1. 修正弹窗表单的提交目标(dash.html)
表单的action属性必须指向addItem视图对应的URL,同时补全未闭合的标签:
<div class="modal-content"> <div class="card card-success"> <div class="card-header"> <h3 class="card-title"><b>Add Item</b></h3> </div> <div class="card-body"> <!-- 修改action为URL反向解析 --> <form action="{% url 'newItem' %}" method="post"> {% csrf_token %} <div class="row"> <div class="col-sm-6"> <div class="form-group"> <label> Item Name:</label> <input class="form-control form-control-lg" name="item_name" type="text" placeholder="Item name"> </div> </div> <div class="col-sm-6"> <div class="form-group"> <label> Item size:</label> <input class="form-control form-control-lg" name="item_size" type="text" placeholder="Item size"> </div> </div> </div> <!-- 补全row闭合标签 --> </div> <!-- 补全card-body闭合标签 --> <div class="modal-footer"> <input type="submit" class="btn btn-default" value="submit"> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> </div> </form> <!-- 补全form闭合标签 --> </div> </div>
说明:
{% url 'newItem' %}是Django的URL反向解析,对应urls.py中name='newItem'的路由。
2. 修正视图函数的模型导入与创建逻辑(views.py)
- 修正模型导入路径,确保导入的是
itemModel而非视图函数 - 创建对象时字段名需与模型定义一致(小写
name而非大写Name) - 用
get方法获取POST参数,避免字段缺失时抛出异常:
from django.shortcuts import redirect from .models import itemModel # 根据实际目录调整导入路径 def addItem(request): if request.method == "POST": name = request.POST.get('item_name') size = request.POST.get('item_size') # 简单验证字段非空 if name and size: itemModel.objects.create(name=name, size=size) return redirect('dashboard') # 处理GET请求,直接跳回仪表盘 return redirect('dashboard')
3. 修正表单类的字段映射(forms.py)
由于itemModel的字段是name和size,表单类的fields需与模型字段对应(若后续使用表单渲染模板则必须修正):
from django import forms from .models import itemModel class itemForm(forms.ModelForm): class Meta: model = itemModel fields = ["name", "size"] # 与模型字段保持一致
说明:如果继续手动编写模板表单,此步骤可暂时跳过,但需确保视图中获取的参数与模型字段匹配。
4. 确认路由配置(urls.py)
当前路由已正确映射addItem/到views.addItem,无需修改:
from django.urls import path from . import views urlpatterns = [ path('', views.dashBoard, name='dashboard'), path('addItem/', views.addItem, name='newItem'), ]
完成以上修改后,点击弹窗的提交按钮,表单数据会发送到addItem视图,执行数据保存逻辑后自动跳回仪表盘页面。
内容的提问来源于stack exchange,提问作者Alchimie
相关产品推荐
相关产品推荐

