【发布时间】:2023-02-24 04:43:29
【问题描述】:
我有一个 WathList 模型:
class Watchlist(models.Model):
item = models.ForeignKey(Auction, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return f"{self.user}\t\tItem: {self.item}"
我想获得所有物品执行查询后
def view_watchlist(request):
active_listings = Auction.objects.filter(status=True)
# watchlist_items = Watchlist.objects.filter(user=request.user).values('items')
# for watchlist_item in watchlist_items:
# print(watchlist_item.item)
# print(watchlist_items.values('items'))
return render(request, "auctions/index.html", {
"listings": active_listings,
})
传递所有列入观察名单的项目。是否可以不使用 for 循环来实现?
我尝试使用 .values 方法、.values_list 和 .only 但没有成功: 为了让它工作,我创建了一个空列表和一个 for 循环
def view_watchlist(request):
watchlist_items = Watchlist.objects.filter(user=request.user).only('item')
watchlist = []
for watchlist_item in watchlist_items:
watchlist.append(watchlist_item.item)
return render(request, "auctions/index.html", {
"listings": watchlist,
})
但我怀疑有一种更优雅的方法可以做到这一点。也许使用相关名称定义模型时?
【问题讨论】:
-
我怀疑您可能需要
select_related,例如Watchlist.objects.filter(user=request.user).select_related('items')。然后在您的模板中执行循环。for listing in listings: listing.item。 -
我不太确定您要做什么,但也许您可以这样做:
Auction.objects.filter(watchlist_set__user=request.user)。没有测试它,但应该工作,让我知道,我会写一个答案。 -
@DarK_FirefoX 这将引发错误,因为
watchlist_set不是字段。也许您想说Auction.objects.filter(watchlist__user=request.user),这也是有效的。 -
非常感谢@DarK_FirefoX!!!它工作得很好。