2 回答
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 %}
TA贡献1802条经验 获得超6个赞
难道不应该通过self
在类级别向属性添加 a 来工作吗?
publishdate = self.created_on.strftime('%Y/%m')
添加回答
举报