首页 > 解决方案 > 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>

listingWatchlist类中的外键。

我正在尝试做我认为是一个简单的测试来确定该项目是否已经在监视列表中。这是我的尝试:

{% if listing not in listing.watchlist %}

(这是错误的)

如何在模板中进行布尔测试以有效地切换按钮上的文本?

提前致谢!

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-templates

解决方案


推荐阅读