我正在尝试在模型中创建一个函数,该函数不会返回将来发布的帖子。
这是模型:
from django.db import models
from django.utils import timezone
import datetime
class ModelPost(models.Model):
title = models.CharField(
max_length=70,
unique=True,
)
publishing_date = models.DateTimeField(
default=timezone.now,
)
contents = models.TextField(
max_length=200,
blank=True,
)
def __str__(self):
return self.title
@property
def is_future(self):
if self.publishing_date > datetime.now()
return True
return False
视图是这样的:
def listPostsOnline(request):
posts_list = BlogPost.objects.all() #filter(published=True)
context = {"posts_list": posts_list}
template = 'blog/reading/list_post_online.html'
return render(request, template, context)
这是模板:
{% for p in posts_list %}
{% if not p.is_future %}
<div class="container my-4">
<h3><a href="{{ p.get_absolute_url }}">{{ p.title }}</a></h3>
<h5>{{ p.publishing_date|date:"d - M - Y | G:i:s" }}</h5>
</div>
{% else %}
<div class="container-full">
<h1>No data!</h1>
</div>
{% endif %}
{% endfor %}
问题是我有此错误
模块'datetime'没有属性'now'
归因于is_future
,我无法解决。
更新
这个post
启发了我第一次尝试
我放了from datetime import datetime
而不是import datetime
,我看到了这个错误:
无法比较原始偏移时间和可感知偏移的日期时间
第二次尝试
使用import datetime
代替了if self.publishing_date > datetime.datetime.now():
,我放置了if self.publishing_date > datetime.now():
,我再次看到了这一点:
无法比较原始偏移时间和可感知偏移的日期时间
答案 0 :(得分:0)
解决方案是here。我已将 USE_TZ = True 更改为 USE_TZ = False
现在我有正确的帖子列表
答案 1 :(得分:0)
这里真正的解决方案是使用django.utils.timezone.now()
而不是datetime.now()