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

如何触发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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:27:04