簡體   English   中英

為什么這個 if 語句在 Django 中不起作用?

[英]Why is this if statement not working in Django?

我只是想在 {% %} 事情中使用 django 在 html 中運行 if 語句。 statemnet 是 {% if listing in watchlist %}。 即使列表在監視列表中,它也不會使 if 語句為真。

我使用 {{ }} 來查看監視列表和列表是什么。 對於 {{ watchlist }} 我得到: <QuerySet [<Watchlists: 15: Dan1308 has added 3: The Bus(是的很酷的飛機),從 3000 開始到監視列表>]>

對於{{列表}},我得到: 3:巴士(是的,很酷的飛機),從 3000 開始

這是我的 views.py:

def listing(request, NewListings_id):
user = request.user
listing = NewListings.objects.get(pk=NewListings_id)
comments = Comments.objects.filter(listing=listing)
watchlist = Watchlists.objects.filter(user=user)
return render(request, "auctions/listing.html", {
    "listing": listing,
    "comments": comments,
    "user": user,
    "watchlist": watchlist
})

這是我的models.py:

class Watchlists(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
listing = models.ForeignKey(NewListings, on_delete=models.CASCADE)

def __str__(self):
    return f"{self.id}: {self.user} has added {self.listing} to watchlist"

那么,為什么它不起作用?

watchlist = Watchlists.objects.filter(user=user)
listing = NewListings.objects.get(pk=NewListings_id)

listing是一個NewListings實例,而watchlist是一個Watchlists實例的查詢集。 所以listing不在查詢集中。

相反,查詢集中有一個watchlist實例,其中listing外鍵指向listing

另一種方法是檢查列表是否在視圖中的監視列表中:

def listing(request, NewListings_id):
    user = request.user
    listing = NewListings.objects.get(pk=NewListings_id)
    comments = Comments.objects.filter(listing=listing)
    watchlist = Watchlists.objects.filter(user=user)
    listing_in_watchlist = Watchlist.objects.filter(user=user, listing=listing).exists()
    return render(request, "auctions/listing.html", {
        "listing": listing,
        "comments": comments,
        "user": user,
        "watchlist": watchlist,
        "listing_in_watchlist": listing_in_watchlist,
    })

現在,在模板中,您可以使用{% if listing_in_watchlist %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM