Django: отключить публикацию после события - PullRequest
1 голос
/ 28 мая 2019

Я пытаюсь отключить сообщения после события, определенной даты.Я разработал простую модель для проверки своей цели, и внутри модели я поместил функцию ( с именем is_expired ), которая в идеале должна определять, находится ли публикация в сети.Ниже представлена ​​модель :

from django.db import models
from django.utils import timezone
import datetime

class BlogPost(models.Model):
    CHOICHES = (
        ("Unselected", "Unselected"),
        ("One Month", "One Month"),
        ("One Year", "One Year"),
        )

    title = models.CharField(
        max_length=70,
        unique=True,
        )
    membership = models.CharField(
        max_length=50,
        choices=CHOICHES,
        default="Unselected",
        )
    publishing_date = models.DateTimeField(
                        default=timezone.now,
                        )

    def __str__(self):
        return self.title

    @property
    def is_future(self):
        if self.publishing_date > datetime.datetime.now():
            return True
        return False

    @property
    def is_expired(self):
        if self.membership == "One Month":
            def monthly(self):
                if publishing_date + datetime.timedelta(days=30) <= datetime.datetime.now():
                    return True
        if self.membership == "One Year":
            def yearly(self):
                if publishing_date + datetime.timedelta(days=365) <= datetime.datetime.now():
                    return True
        return False

    class Meta:
        ordering = ['-publishing_date']

. Для отображения списка всех сообщений с истекшим сроком действия я использую этот простой шаблон :

{% for p in posts_list %}
  {% if p.is_future or p.is_expired %}
  <div class="container my-4 bg-primary">
    <h3><a class="text-white" href="{{ p.get_absolute_url }}">{{ p.title }}</a></h3>
    <h5>Data di pubblicazione: {{ p.publishing_date|date:"d - M - Y | G:i:s" }}</h5>
    {% if p.is_expired %}
      <p>Expired? <span class="text-danger"><strong>Yes</strong></span></p>
    {% else %}
      <p>Expired? <span class="text-success"><strong>No</strong></span></p>
    {% endif %}
  </div>
  {% endif %}
{% empty %}
  <div class="container my-4 bg-primary">
    <h1>No posts!</h1>
  </div>
{% endfor %}

Проблема в том, что я не вижу сообщения с истекшим сроком действия, а только будущие сообщения ( с функцией is_future ), внутри консоли нет ошибок, и теперь я не вижу, где находится ошибка.Я новичок в использовании Python и Django.

Кто-то может указать мне на ошибку?

ОБНОВЛЕНИЕ:

views.py

def listPosts(request):
    posts_list = BlogPost.objects.all()
    context = {"posts_list": posts_list}
    template = 'blog/reading/list_post.html'
    return render(request, template, context)

1 Ответ

1 голос
/ 28 мая 2019

Ваш метод is_expired() всегда возвращает False.Внутри метода вы определяете две внутренние функции (monthly и yearly), но никогда не вызываете их.Эти внутренние функции на самом деле бесполезны, вы хотите:

@property
def is_expired(self):
    if self.membership == "One Month":
        if self.publishing_date + datetime.timedelta(days=30) <= datetime.datetime.now():
            return True
    elif self.membership == "One Year":
        if self.publishing_date + datetime.timedelta(days=365) <= datetime.datetime.now():
            return True
    return False
...