python - Django:在事件发生后下线帖子
问题描述
我正试图在某个事件、一个确定的日期之后将这些帖子下线。我开发了一个简单的模型来测试我的目标,并在模型中放置了一个函数(名为 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 的新手。
有人可以向我指出错误吗?
更新:
视图.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)
解决方案
你的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
推荐阅读
- javascript - Redux 状态填充正确,但组件不显示状态
- java - 构建文件不是 gradle 中的设置文件定义的构建的一部分
- html - 粘性侧边栏不粘
- javascript - jQuery .not() 不删除元素?
- c# - 使用 async/await 初始化方法继承
- javascript - 使用点击处理程序和 window.location.replace 的链接也具有与 href 相同的位置是不好的做法吗?
- javascript - 将 Firebase 实时数据库与 React Native 应用程序集成
- aws-lambda - 使用 API 密钥通过 API Gateway 对最终用户进行身份验证有什么问题?
- r - 从一些观察中删除秒数以使用 R 以 HM 格式工作
- spring-cloud-dataflow - 如何使用本地 Spring Cloud 数据流公开我的 Web 应用程序 REST API