Django报错datetime fromisoformat: argument must be str,存储日期至数据库失败
问题解决:datetime fromisoformat类型错误
错误根源
你代码里存在几个关键问题:
- 错误生成日期值:
date = models.DateTimeField(default=timezone.now)这行是在创建DateTimeField字段对象,而非获取当前时间值。数据库需要的是datetime类型的时间实例,不是字段类本身,这直接触发了类型不匹配错误。 - 其他潜在问题:
email = request.user.get_email:Django默认用户模型的邮箱属性是email,应改为request.user.email;如果get_email是自定义方法,需加括号调用get_email()。redirect(request,"{% url 'home' %}"):redirect函数不需要传入request参数,且视图中不能使用模板标签语法,直接写redirect('home')即可。
修正后的代码
from django.utils import timezone from django.contrib import messages from django.shortcuts import render, redirect # 请确保已导入你的supportmessages模型 def message_send(request): if request.user.is_authenticated: if request.method == 'POST': name = request.user.username email = request.user.email # 修正:直接获取用户邮箱属性 title = request.POST.get('title') message = request.POST.get('message') date = timezone.now() # 修正:调用timezone.now()获取当前时间对象 support = supportmessages( name=name, email=email, title=title, message=message, date=date ) support.save() messages.success(request, 'Your message has been sent') # 修正拼写错误:mesaage→message return render(request,"messagesend.html") return render(request,"messagesend.html") else: return redirect('home') # 修正:直接使用URL名称跳转
额外优化建议
如果你的supportmessages模型已经给date字段设置了default=timezone.now,视图里完全可以省略手动传入date参数,模型会自动填充默认值:
# 模型示例 class supportmessages(models.Model): name = models.CharField(max_length=100) email = models.EmailField() title = models.CharField(max_length=200) message = models.TextField() date = models.DateTimeField(default=timezone.now) # 模型层设置默认值 # 视图中可简化为: support = supportmessages( name=name, email=email, title=title, message=message )
内容的提问来源于stack exchange,提问作者user20747805
相关产品推荐
相关产品推荐

