Функция, которая фильтрует будущие сообщения с помощью datetime.now () - Django - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь создать внутри модели функцию, которая не возвращает публикацию, опубликованную в будущем.

Это модель:

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" не имеет атрибута "теперь '

приписано is_future, и я не могу решить.

ОБНОВЛЕНИЕ

Я был вдохновлен этим post

FIRST TRY

Я поставил from datetime import datetime вместо import datetime и вижу эту ошибку:

не может сравнивать смещенные наивные и смещенные даты

ВТОРАЯ ПОПЫТКА

с import datetime Я поставил if self.publishing_date > datetime.datetime.now(): вместоif self.publishing_date > datetime.now(): и я снова вижу это:

не может сравнивать смещенные наивные и учитывающие смещения даты и времени

1 Ответ

0 голосов
/ 22 мая 2019

Решение здесь . Я изменил USE_TZ = True на USE_TZ = False

Теперь у меня правильный список сообщений

...