python - 扩大在活动结束后将帖子下线的可能性
问题描述
我正在尝试使用以下代码扩展我在这个问题中展示的功能:
@property
def is_expired(self):
print(self.publishing_date)
if self.membership == "One Month":
if self.publishing_date + datetime.timedelta(days=30) < datetime.datetime.now():
message = 'Scaduto'
return message
else:
expiring_date = self.publishing_date + datetime.timedelta(days=30)
delta = expiring_date - datetime.datetime.now()
return delta
else:
if self.publishing_date + datetime.timedelta(days=365) < datetime.datetime.now():
message = 'Scaduto'
return message
else:
expiring_date = self.publishing_date + datetime.timedelta(days=365)
delta = expiring_date - datetime.datetime.now()
return delta
return False
我想使用这个新模板:
{% for asset in user_details.authorized_user_set.all %}
{% if not asset.is_expired %}
<tr>
<td class="text-left"><p><strong><a class="text-info" href="{{ asset.get_absolute_url }}">{{ asset.title }}</a></strong></p></td>
<td class="text-center">
{% if asset.type == "3D Region" %}
<p class="badge badge-pill badge-primary">{{ asset.type }}</p>
{% elif asset.type == "3D Village" %}
<p class="badge badge-pill badge-secondary">{{ asset.type }}</p>
{% else %}
<p class="badge badge-pill badge-success">{{ asset.type }}</p>
{% endif %}
</td>
<td class="text-right"><p>{{ asset.publishing_date }}</p></td>
<td class="text-center">
{% if asset.membership == "One Month" %}
<p class="badge badge-pill badge-warning">{{ asset.membership }}</p>
{% else %}
<p class="badge badge-pill badge-danger">{{ asset.membership }}</p>
{% endif %}
</td>
<td class="text-right"><p>{{ asset.delta }}</p></td>
</tr>
{% endif %}
{% endfor %}
在 Django 管理面板中,我可以正确地看到我想要的所有内容,如下图所示,但模板给了我一个空表。如果我删除返回 delta 一切正常的 else 条件,那么问题就在这里,但我不知道如果我使用完整代码,为什么在 Django 管理面板中一切正常。
解决方案
It returns an empty table because your property is_expired
always return a non-false value. Your asset.is_expired
check should check if asset.is_expired == 'Scaduto'
.
However, I recommend you to have this logic inside your model:
@property
def expiration_date(self):
if self.membership == "One Month":
return self.publishing_date + datetime.timedelta(days=30)
else:
return self.publishing_date + datetime.timedelta(days=365)
@property
def is_expired(self):
return self.expiration_date < datetime.datetime.now()
@property
def delta(self):
return self.expiration_date - datetime.datetime.now() if not self.is_expired else 'Scaduto'
Then, you can use it as you want in the template. If what you want is to have it as you have in the admin panel:
{% for asset in user_details.authorized_user_set.all %}
<tr>
<td class="text-left"><p><strong><a class="text-info" href="{{ asset.get_absolute_url }}">{{ asset.title }}</a></strong></p></td>
<td class="text-center">
{% if asset.type == "3D Region" %}
<p class="badge badge-pill badge-primary">{{ asset.type }}</p>
{% elif asset.type == "3D Village" %}
<p class="badge badge-pill badge-secondary">{{ asset.type }}</p>
{% else %}
<p class="badge badge-pill badge-success">{{ asset.type }}</p>
{% endif %}
</td>
<td class="text-right"><p>{{ asset.publishing_date }}</p></td>
<td class="text-center">
{% if asset.membership == "One Month" %}
<p class="badge badge-pill badge-warning">{{ asset.membership }}</p>
{% else %}
<p class="badge badge-pill badge-danger">{{ asset.membership }}</p>
{% endif %}
</td>
<td class="text-right"><p>{{ asset.delta }}</p></td>
</tr>
{% endfor %}
推荐阅读
- gnu - 外部排序的内存使用(gnu coreutils)
- timer - 当代码没有停止运行并且上传失败时,如何将代码上传到 Arduino UNO?
- android - 在 Android 中使用 TextView 更改 SeekBar 位置
- reactjs - Gatsby JS 元素类型无效:应为字符串(用于内置组件)或类/函数(用于复合组件)但得到:未定义
- python - 如果按下鼠标按钮或键而不重复代码,有没有办法执行相同的代码?
- python - 条码检测预处理
- webserver - 是否有任何具有更新数据库的模块或软件来避免此类请求?
- c# - 我们如何使用 c# SQL 在检查时隐藏滑块图像位置
- swift - 在 UIImage ARKit 4 上显示置信度图
- angular - 角度路由将带有片段部分的URL外部重定向到角度页面