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

为何出现AttributeError: 'function'无'day'属性?Django博客视图问题

嘿,这个错误我之前踩过坑!核心问题出在你Post模型里的slug字段配置上,咱们一步步来解决:

解决AttributeError: 'function' object has no attribute 'day' 错误

首先,这个报错的根源很明确:你Post模型中slug字段的unique_for_date参数指向的不是一个有效的日期字段,而是一个函数/方法对象。unique_for_date要求必须传入模型中实际存在的DateField或DateTimeField字段名,当Django尝试验证slug的唯一性时,会去访问该字段的day属性,可如果指向的是函数,自然就会抛出这个错误。

从你给出的代码片段看,你写的是unique_for_date='p...'——大概率是你想指向一个日期字段(比如publish或posted_at),但要么这个字段根本没定义,要么你不小心写成了某个方法的名字。

第一步:修正Post模型的slug字段

先给Post模型补上一个有效的日期字段,再把unique_for_date正确指向它,示例如下:

from django.db import models
from django.utils.text import slugify

class Post(models.Model):
    title = models.CharField(max_length=200)
    short_description = models.CharField(max_length=350)
    # 新增日期字段,比如文章发布时间
    publish_time = models.DateTimeField(auto_now_add=True)
    # 把unique_for_date指向上面的日期字段名
    slug = models.SlugField(unique_for_date='publish_time')

    # 可选:自动生成slug(如果你的表单没手动处理slug的话)
    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)

第二步:修复CreateView的潜在配置问题

另外注意,你CreateView里的redirect_field_name设置有点误区:这个参数是用来指定登录后跳转的URL参数名(比如?next=/blog/post/1/里的next),不是创建成功后的跳转页面。如果想指定成功跳转目标,应该用success_url或者重写get_success_url方法:

from django.views.generic.edit import CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse
from .models import Post
from .forms import PostForm

class CreatePostView(LoginRequiredMixin, CreateView):
    login_url = '/login/'
    # redirect_field_name用默认的'next'即可,或直接删除使用默认值
    redirect_field_name = 'next'
    model = Post
    form_class = PostForm

    # 重写方法跳转到刚创建的文章详情页
    def get_success_url(self):
        return reverse('post_detail', kwargs={'slug': self.object.slug})

最后验证修改

修正模型后,别忘了运行数据库迁移:

python manage.py makemigrations
python manage.py migrate

这样应该就能彻底解决那个AttributeError了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:37:13