django - Django:从模板中访问外键
问题描述
我正在尝试根据 Django 模板中的 if 语句切换按钮上的文本。如果产品还不是用户关注列表的一部分,那么我希望按钮上的文本读作“添加”。否则,我希望按钮上的文本读作“删除”。
这是我的代码:
视图.py
def listing(request, listing_id):
listing = Listing.objects.get(pk=listing_id)
if request.method == 'POST':
user = User.objects.get(username=request.user)
if request.POST.get('button') == 'Watchlist':
if not user.watchlist.filter(listing=listing):
watchlist = Watchlist()
watchlist.user = user
watchlist.listing = listing
watchlist.save()
else:
user.watchlist.filter(listing=listing).delete()
return HttpResponseRedirect(reverse('listing', args=(listing.id,)))
模型.py:
class Watchlist(models.Model):
user = models.ForeignKey(User, on_delete=CASCADE, related_name='watchlist')
listing = models.ForeignKey(Listing, on_delete=CASCADE, related_name='listing')
class Listing(models.Model):
title = models.CharField(max_length=50)
description = models.TextField(verbose_name="Description")
list.html 模板:
<div>
<form action="{% url 'listing' listing.id %}" method="POST">
{% csrf_token %}
{% if listing not in listing.watchlist %}
<button type="submit" name="button" value="Watchlist" class="btn btn-primary">Add to Watchlist</button>
{% else %}
<button type="submit" name="button" value="Watchlist" class="btn btn-primary">Remove from Watchlist</button>
{% endif %}
</form>
</div>
listing
是Watchlist
类中的外键。
我正在尝试做我认为是一个简单的测试来确定该项目是否已经在监视列表中。这是我的尝试:
{% if listing not in listing.watchlist %}
(这是错误的)
如何在模板中进行布尔测试以有效地切换按钮上的文本?
提前致谢!
解决方案
推荐阅读
- python-3.x - 有没有办法创建保留列表中元素顺序的组合?
- wordpress - 在“成员”Wordpress 插件中添加自定义功能
- python - 如何替换熊猫中的值?
- javascript - 用 promise.all 反应原生 firebase 异步等待并行
- c - 为什么 C 中“errno”的类型是 `int` 而不是 `unsigned int`?
- getstream-io - 尝试在 Stream (JS) 中启用一对一聊天时未连接频道
- sql - SQL - 统计链接键 - 如果字符串不是所需的长度,则将字符添加到字符串
- node.js - 如何在nodejs中的mongodb中自动删除特定文档
- azure-maps - 加载 Azure 地图 - 它首先闪烁整个世界,然后将相机设置到它的位置
- postgresql - PostgreSQL 10 SELECT WHERE 语句