Странное поведение Django queryset при попытке фильтрации с использованием филера 'lte' по полю datetime

Я наблюдаю странное поведение одной из моих моделей и с трудом могу отследить, что происходит. В моем приложении есть относительно простая модель "posts", которую я пытаюсь передать в ListView:

# models.py
class Posts(models.Model):
    draft = 0
    published = 1
    status_choices = [(draft, "Draft"), (published, "Published")]

    id = models.AutoField(primary_key=True, unique=True)
    title = models.CharField(max_length=500)
    slug = models.SlugField(max_length=500, unique=True)
    text = models.TextField(null=False)
    html = models.TextField(blank=True, null=True)
    status = models.IntegerField(choices=status_choices, default=draft)
    create_date = models.DateTimeField(default=timezone.now, verbose_name="Post date")
    update_date = models.DateTimeField(default=timezone.now, verbose_name="Last edited")

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        savetime = datetime.now().replace(microsecond=0)
        if savetime != self.create_date     # set the update date if needed
            self.update_date = savetime
        if not self.slug:
            self.slug = slugify(self.title) # make sure the post gets a slug
        self.html = md.convert(self.text)   # convert markdown to HTML for storage
        return super().save(*args, **kwargs)

# views.py
class PostList(ListView):
    context_object_name = "posts"
    model = Posts
    queryset = (
        Posts.objects.all()
        .filter(create_date__lte=datetime.now(), status__exact=1)
        .order_by("-create_date")
    )
    template_name = "post.html"
    paginate_by = 20
    paginate_orphans = 2

Но когда я создаю новый пост, он не отображается в шаблоне, пока я не перезапущу приложение. Я думаю, что это может быть связано с фильтром create_date__lte=datetime.now(), потому что когда я его убираю, он работает нормально. (Я не хочу его убирать... Я хочу иметь возможность датировать сообщение в будущем, чтобы оно появлялось после этого времени.

Но даже с установленным фильтром, когда я смотрю на запрос в оболочке Django, кажется, что он работает - в примере ниже, POST1, POST2 и POST3 все в прошлом, но POST4 датирован будущим.

>>> p = Posts.objects.all().filter(create_date__lte=datetime.now(), status__exact=1).order_by("-create_date")
>>> p
<QuerySet [<Posts: POST3>, <Posts: POST2>, <Posts: POST1>]>
>>> p = Posts.objects.all().filter(status__exact=1).order_by("-create_date")
>>> p
<QuerySet [<Posts: POST4>, <Posts: POST3>, <Posts: POST2>, <Posts: POST1>]>
>>>

Что здесь происходит?

Вернуться на верх