python - DateTimeField 对象没有属性 strftime

标签 python django django-models django-urls

我的主要代码是这样的:

  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

输出是:

File "C:\Users\[user]\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\fields\__init__.py", line 933, in value_from_object
    return getattr(obj, self.attname)
AttributeError: 'DateTimeField' object has no attribute 'attname'

最佳答案

在类级别,created_onDateTimeField,而不是 datetime 对象和 Post 对象(不是类)保存。如果你想添加一个格式化它的属性,你可以使用:

class Post(models.Model):
    # …
    created_on = models.DateTimeField(auto_now_add=True)

    <b>@property</b>
    def <b>publishdate</b>(self):
        return <b>self.</b>created_on.strftime('%Y/%m')

    # …

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

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

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

urlpatterns = [
    path('', views.PostList.as_view(), name='home'),
    path(
        <b>'<int:year>/<int:month></b>/<slug:slug>',
        views.PostDetail.as_view(),
        name='post_detail'
    )
]

在您的 View 中,您可以使用以下内容进行过滤:

class PostDetail(DetailView):
    model = Post

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(
            <b>created_on__year=self.kwargs['year']</b>,
            <b>created_on__month=self.kwargs['month']</b>
        )

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

{% url 'post_detail' <b>post.created_on.year</b> <b>post.created_on.month</b> post.slug %}

关于python - DateTimeField 对象没有属性 strftime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63893136/

相关文章:

mysql - 具有自动提交事务的 Django save() 行为

python - 有没有办法在内部函数的函数中使用变量

Python,覆盖__getstate__() 和 __setstate__()

python - 系统错误 : null argument to internal routine in xmlsec

django - sorl-thumbnail:在保存前调整原始图像的大小?

django - 被 CORS 策略阻止 : No 'Access-Control-Allow-Origin' header is present on the requested resource

Django 1.4 创建编辑用户配置文件帐户设置 View

python - 在多列上使用 df.withColumn()

python - 连续两次使用 "readlines()"

django - 当还涉及迁移时,如何使用 django 进行同步数据库