为了账号安全,请及时绑定邮箱和手机立即绑定

DateTimeField 对象没有属性 strftime

DateTimeField 对象没有属性 strftime

海绵宝宝撒 2023-08-08 10:47:36
我的主要代码是这样的:  class Post(models.Model):    title = models.CharField(max_length=200, unique=True)    slug = models.SlugField(max_length=200, unique=True)    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')    updated_on = models.DateTimeField(auto_now=True)    image = models.ImageField(upload_to='images/%Y/%m/%d/', blank=True)    content = models.TextField()    created_on = models.DateTimeField(auto_now_add=True)    status = models.IntegerField(choices=STATUS, default=0)    publishdate = created_on.strftime('%Y/%m')    class Meta:        ordering = ['-created_on']    def __str__(self):        return self.title当我运行这段代码时,我得到:'DateTimeField' object has no attribute 'strftime'参考发布日期strftime 与 datetime.datetime 一起使用,而 DateTimeField 转换为 datetime.datetime,那么我做错了什么?我尝试转换为 datetime.datetime 无济于事编辑:看到答案后,我想我应该验证我想要做什么我正在尝试将日期添加到 urls.py 中的此网址:   urlpatterns = [      path('', views.PostList.as_view(), name='home'),      path('<publishdate>/<slug:slug>', views.PostDetail.as_view(), name='post_detail']编辑2:我已将代码更新为:class Post(models.Model):    title = models.CharField(max_length=200, unique=True)    slug = models.SlugField(max_length=200, unique=True)    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')    updated_on = models.DateTimeField(auto_now=True)    image = models.ImageField(upload_to='images/%Y/%m/%d/', blank=True)    content = models.TextField()    created_on = models.DateTimeField(auto_now_add=True)    status = models.IntegerField(choices=STATUS, default=0)    created_on_string = created_on.value_to_string(created_on)    publishdate = strptime(created_on_string, '%Y/%m')    class Meta:        ordering = ['-created_on']    def __str__(self):        return self.title
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

在类级别,created_on是 a DateTimeField,而不是datetime对象(不是类)所拥有的Post 对象。如果你想添加一个格式化它的属性,你可以使用:


class Post(models.Model):

    # …

    created_on = models.DateTimeField(auto_now_add=True)


    @property

    def publishdate(self):

        return self.created_on.strftime('%Y/%m')


    # …

话虽如此,格式化数据通常不是模型的任务。模型用于存储和表示数据。例如,在模板中,您可以使用|date模板标签 [Django-doc]以datetime指定格式格式化对象。对于给定的Post对象post,您可以将其格式化为:


{{ post.created_on|date:'Y/m' }}

对于 URL,您可以使用两个参数:


urlpatterns = [

    path('', views.PostList.as_view(), name='home'),

    path(

        '<int:year>/<int:month>/<slug:slug>',

        views.PostDetail.as_view(),

        name='post_detail'

    )

]

在您看来,您可以使用以下内容进行过滤:


class PostDetail(DetailView):

    model = Post


    def get_queryset(self, *args, **kwargs):

        return super().get_queryset(*args, **kwargs).filter(

            created_on__year=self.kwargs['year'],

            created_on__month=self.kwargs['month']

        )

在模板中,您可以使用以下对象链接到视图post:


{% url 'post_detail' post.created_on.year post.created_on.month post.slug %}


查看完整回答
反对 回复 2023-08-08
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

难道不应该通过self在类级别向属性添加 a 来工作吗?

publishdate = self.created_on.strftime('%Y/%m')


查看完整回答
反对 回复 2023-08-08
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信