You need to enable JavaScript to run this app. Django中获取用户输入日期并存入Admin的实现与报错处理
优惠活动
大模型
产品
解决方案
定价
更多

Django中获取用户输入日期并存入Admin的实现与报错处理

报错根因

  • 你从前端date输入框拿到的stamp_date是YYYY-MM-DD格式的纯字符串,代码里直接把这个字符串塞给datetime.date()做参数,完全不符合方法调用要求——datetime.date()需要接收年、月、日三个整数参数,直接传字符串会直接触发类型错误,这就是提交表单就崩溃的核心原因。
  • 代码里重复导入了两次Form1,导入路径还不一致,会引发模块加载的冗余冲突。
  • 视图代码没有用标准Django视图函数包裹,缺少框架必需的request入参定义,本身结构就不符合运行要求。
  • Admin页异常是因为之前提交失败后,数据库表内写入了格式非法的脏数据,后台查询时无法被正常解析。

修正后的模块代码

models.py

模型的DateField定义本身没有问题,不需要调整,保持原定义即可:

from django.db import models

class Form1(models.Model):
    stamp_date = models.DateField()

views.py

修正冗余导入、补全视图结构、替换正确的日期转换逻辑:

from django.shortcuts import render, HttpResponse
import datetime
from .models import Form1 

# 补全标准Django视图函数结构
def form1_view(request):
    if request.method == "POST":
        # 获取前端提交的日期字符串
        stamp_str = request.POST.get('stamp_date')
        try:
            # 用strptime把固定格式的字符串解析为date对象
            stamp_date = datetime.datetime.strptime(stamp_str, "%Y-%m-%d").date()
            # 直接调用create方法写入数据库
            Form1.objects.create(stamp_date=stamp_date)
        except (ValueError, TypeError):
            # 非法日期格式的兜底提示,避免直接抛出500错误
            return HttpResponse("提交的日期格式不合法,请重新填写")
    return render(request, 'form1.html')

注意:之前的写法datetime.date(stamp_date)无法正常工作,因为它不能直接接收整个日期格式的字符串做参数。

form1.html

表单结构不需要大改,只要保证input的name属性和后端取值的键名完全一致即可:

<form method="POST" action="/form1/">
    {% csrf_token %}
  <div class="form-group">
    <label for="exampleFormControlInput1">Security Stamp Date</label>
    <input type="date" class="form-control" id="exampleFormControlInput1" name="stamp_date" required>
  </div>
  <button type="submit" class="btn btn-primary"> Submit </button>
</form>

Admin页异常修复方法

进入应用对应的数据库表,删除所有格式异常的旧记录,重启Django开发服务器后,Admin页即可正常访问、录入数据。

可选优化:如果不想手动写日期字符串转对象的逻辑,可以直接使用Django内置的ModelForm,框架会自动完成格式校验、类型转换的全流程,大幅减少手动代码的出错概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 13:15:03