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

如何在自定义HTML模板中使用Django Form并将表单数据保存至数据库?

如何用Django渲染自定义表单并保存数据到数据库

你已经有了自定义HTML模板和ModelForm,接下来只需要把这些部件串联起来,就能实现渲染表单、保存数据到数据库的功能。下面是一步步的具体操作:

1. 确认Product模型字段匹配

首先要保证models.py里的Product模型字段,和你表单里的输入项一一对应。比如结合你模板里的输入项,模型可以这样写:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255, verbose_name="Title")
    price = models.DecimalField(max_digits=10, decimal_places=2)
    description = models.TextField(verbose_name="Description")
    image = models.ImageField(upload_to='products/', blank=False, verbose_name="Image")

    def __str__(self):
        return self.name

⚠️ 关键提醒:模板里输入框的name属性必须和模型字段名一致!比如你模板里的textarea是name="message",要改成name="description"(对应模型的description字段);文件输入的name="filename"要改成name="image"(对应模型的image字段),不然表单验证会直接失败。

2. 编写视图函数处理表单请求

在views.py里添加处理表单的视图,要同时支持GET(显示空表单)和POST(提交保存数据)请求,还要专门处理文件上传:

from django.shortcuts import render, redirect
from .forms import AddItemForm

def add_item(request):
    # 处理POST提交请求
    if request.method == 'POST':
        # 必须传入request.FILES才能捕获上传的图片
        form = AddItemForm(request.POST, request.FILES)
        if form.is_valid():
            # 验证通过后直接保存到数据库
            form.save()
            # 跳转到你的成功页面(替换成你自己的URL名称即可)
            return redirect('menu_list')
    # 处理GET请求:展示空表单
    else:
        form = AddItemForm()
    
    # 把表单对象传给模板渲染
    return render(request, '你的模板文件名.html', {'form': form})

记得把你的模板文件名.html换成你实际使用的HTML文件名(比如add_item.html)。

3. 配置URL路由

在你的app的urls.py里,把视图映射到可访问的URL:

from django.urls import path
from . import views

urlpatterns = [
    path('add-item/', views.add_item, name='add_item'),
    # 其他你的路由...
]

现在用户访问/add-item/就能看到你的自定义表单了。

4. 配置文件上传支持(必做,因为有图片上传)

要让上传的图片正常保存和访问,需要在settings.py里添加媒体文件配置:

# 上传的媒体文件保存的本地路径
MEDIA_ROOT = BASE_DIR / 'media'
# 媒体文件的访问URL前缀
MEDIA_URL = '/media/'

然后在项目根目录的urls.py里,添加媒体文件的访问路由(仅开发环境需要):

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

5. 模板的细节优化(可选但推荐)

你现在的自定义模板可以直接用,要是想让表单验证错误更友好,可以在每个输入框下方添加错误提示:

{% if form.name.errors %}
    <div class="error-text">{{ form.name.errors.0 }}</div>
{% endif %}

这样用户输入不符合要求时,能看到明确的提示信息。

完成这些步骤后,访问对应URL就能看到带样式的表单,提交后数据(包括图片)会自动保存到数据库,上传的图片会存在项目根目录的media/products/文件夹里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:09:06