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.date,那么我做错了什么?

我试图转换为datetime.datetime,但无效

编辑:看到答案后,我想我应该验证我想做的

我正试图在urls.py:中将日期添加到此url

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]AppDataLocalProgramsPythonPython38libsite-packagesdjangodbmodelsfields__init__.py", line 933, in value_from_object
return getattr(obj, self.attname)
AttributeError: 'DateTimeField' object has no attribute 'attname'

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

class Post(models.Model):
# …
created_on = models.DateTimeField(auto_now_add=True)
@property
defpublishdate(self):
returnself.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.yearpost.created_on.monthpost.slug %}

在类级别将self添加到属性中不应该起作用吗?

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

最新更新