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

Django保存博文点赞时间报错:datetime对象无save属性

问题修复方案

报错原因

  • 你错误调用了like_time字段值的save()方法:like_time是DateTime类型字段,读取时返回的是datetime.datetime实例,该类本身没有save方法,只有Django模型实例(也就是你代码里的blogpost对象)才内置save()方法用于持久化修改到数据库。
  • 你给like_time字段设置了auto_now=True参数,该参数的作用是每次模型实例调用save方法时,自动将该字段更新为当前时间,不需要你手动赋值或调用保存方法。

额外提示:你原有代码中like字段的related_name='like '后面多了一个空格,建议删除空格,或者修改为语义更清晰的名称比如related_name='liked_posts',避免后续反向查询时报错。

快速修复方案

直接修改视图函数中报错的代码行即可:

def like_post(request,blogpost_id):
    blogpost = get_object_or_404(BlogPost, pk=blogpost_id)

    if request.GET.get('submit') == 'like_post':
        blogpost.like.add(request.user)
        # 调用模型实例的save方法,auto_now会自动更新like_time为当前时间
        blogpost.save()
        return redirect('home')
    else:
        return redirect('home')

注意:视图函数中所有分支都需要返回响应对象,你原有代码点赞分支没有加return redirect,会触发后续报错。

进阶优化(适配多用户点赞时间存储)

你当前的模型设计里like_time是BlogPost的字段,只能存储博文最后一次被点赞的时间,无法保存每个用户各自的点赞时间。如果需要记录每个用户的点赞时间,需要用中间表改造多对多关系:

  1. 新增点赞中间模型,单独存储点赞关联和时间
class LikeRecord(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    blogpost = models.ForeignKey(BlogPost, on_delete=models.CASCADE)
    # 新增时自动写入时间,不需要修改
    like_time = models.DateTimeField(auto_now_add=True)
  1. 修改BlogPost的多对多字段指定中间表
class BlogPost(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    date_post_added = models.DateTimeField(auto_now_add=True)
    # 通过through参数指定自定义中间表
    like = models.ManyToManyField(User,related_name='liked_posts',blank=True, through='LikeRecord')
  1. 点赞逻辑调整为创建中间表记录
def like_post(request,blogpost_id):
    blogpost = get_object_or_404(BlogPost, pk=blogpost_id)
    if request.GET.get('submit') == 'like_post':
        # 自动避免重复点赞
        LikeRecord.objects.get_or_create(user=request.user, blogpost=blogpost)
        return redirect('home')
    else:
        return redirect('home')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:09:00