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

在Django中发送POST请求时出现strftime TypeError该如何解决?

问题原因及解决方案

错误根源

你把datetime模块的两个方法使用逻辑搞反了:

  • datetime.strftime():作用是将datetime/date对象转为指定格式的字符串,第一个入参要求是datetime类型对象,你传入了字符串类型的request.POST['start_date'],所以直接触发类型报错。
  • datetime.strptime():作用是将符合格式的字符串解析为datetime对象,刚好适配你当前的场景。
    另外Django的DateTimeField字段直接接收datetime对象即可,不需要你手动转成字符串存储。

修复后的代码

from datetime import datetime
from django.http import HttpResponse
# 原代码漏了HttpResponse导入,运行时会报错,这里补充

def question_view(request):
    if request.method == 'GET':
        return HttpResponse("Вопрос не создан")
    elif request.method == 'POST':
        poll_question = request.POST['poll_question']
        title = request.POST['title']
        # 把strftime改为strptime,解析字符串为datetime对象
        start_date = datetime.strptime(request.POST['start_date'],'%Y-%m-%d')
        Question.objects.create(poll_question=poll_question,title=title, start_date=start_date)
        return HttpResponse("Вопрос создан")
    else:
        # 原代码这里直接返回字符串不符合Django视图返回要求,同步修正
        return HttpResponse("Попробуйте снова")

优化建议

生产环境不建议直接取POST参数存库,最好增加参数校验逻辑:

  • 可以用Django自带的Form类对start_date做格式合法性校验,避免传入不符合%Y-%m-%d格式的字符串触发解析报错
  • 如果是开发API,更推荐用DRF(Django REST Framework)的序列化器统一处理参数解析、校验逻辑,不需要手动调用datetime方法做转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:57:01