DateTimeField 对象没有属性 strftime

我的主要代码是这样的:


  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



海绵宝宝撒
浏览 105回答 2
2回答

jeck猫

在类级别,created_on是 a DateTimeField,而不是datetime对象(不是类)所拥有的Post 对象。如果你想添加一个格式化它的属性,你可以使用:class Post(models.Model):&nbsp; &nbsp; # …&nbsp; &nbsp; created_on = models.DateTimeField(auto_now_add=True)&nbsp; &nbsp; @property&nbsp; &nbsp; def publishdate(self):&nbsp; &nbsp; &nbsp; &nbsp; return self.created_on.strftime('%Y/%m')&nbsp; &nbsp; # …话虽如此,格式化数据通常不是模型的任务。模型用于存储和表示数据。例如,在模板中,您可以使用|date模板标签 [Django-doc]以datetime指定格式格式化对象。对于给定的Post对象post,您可以将其格式化为:{{ post.created_on|date:'Y/m' }}对于 URL,您可以使用两个参数:urlpatterns = [&nbsp; &nbsp; path('', views.PostList.as_view(), name='home'),&nbsp; &nbsp; path(&nbsp; &nbsp; &nbsp; &nbsp; '<int:year>/<int:month>/<slug:slug>',&nbsp; &nbsp; &nbsp; &nbsp; views.PostDetail.as_view(),&nbsp; &nbsp; &nbsp; &nbsp; name='post_detail'&nbsp; &nbsp; )]在您看来,您可以使用以下内容进行过滤:class PostDetail(DetailView):&nbsp; &nbsp; model = Post&nbsp; &nbsp; def get_queryset(self, *args, **kwargs):&nbsp; &nbsp; &nbsp; &nbsp; return super().get_queryset(*args, **kwargs).filter(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; created_on__year=self.kwargs['year'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; created_on__month=self.kwargs['month']&nbsp; &nbsp; &nbsp; &nbsp; )在模板中,您可以使用以下对象链接到视图post:{% url 'post_detail' post.created_on.year post.created_on.month post.slug %}

呼啦一阵风

难道不应该通过self在类级别向属性添加 a 来工作吗?publishdate&nbsp;=&nbsp;self.created_on.strftime('%Y/%m')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python