使用datetime.now()过滤未来帖子的函数-Django

时间:2019-05-22 12:29:16

标签: python-3.x django-models django-templates django-views django-2.2

我正在尝试在模型中创建一个函数,该函数不会返回将来发布的帖子。

这是模型:

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():,我再次看到了这一点:

  

无法比较原始偏移时间和可感知偏移的日期时间

2 个答案:

答案 0 :(得分:0)

解决方案是here。我已将 USE_TZ = True 更改为 USE_TZ = False

现在我有正确的帖子列表

答案 1 :(得分:0)

这里真正的解决方案是使用django.utils.timezone.now()而不是datetime.now()