假设我有两个Model:
class Auction(models.Model):
seller = models.ForeignKey(User, on_delete=models.CASCADE, related_name="seller")
title = models.CharField(max_length=64)
class Watchlist(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_watchlist')
auction = models.ForeignKey(Auction, on_delete=models.CASCADE, related_name='auction_watchlist')
该视图接收请求,创建一个具有拍卖对象的上下文变量,这些拍卖对象是:
1.与作出请求的用户相关联的
1.已添加到监视列表模型中,
将其发送到模板。
我已将视图设置为如下工作方式:
@login_required
def watchlist(request):
watchlist_objects = Watchlist.objects.filter(user=request.user)
auction_objects = Auction.objects.filter(auction_watchlist__in=watchlist_objects).all()
context = {'watchlist_auctions': auction_objects}
print(context)
return render(request, "auctions/watchlist.html", context)
- 我进行第一个查询以获取与用户关联的监视列表中的项目列表。
- 然后我用它从Auction Model中获取另一个查询,并将其传递给模板。
在模板中,我可以访问Auction的属性来显示它们。(标题、作者和其他为了简单起见而没有包括的属性)
问题是:这是正确的方法吗?是否有更好的方法从第一个监视列表查询访问拍卖中的属性?
在我看来,我做的事情太复杂了。
1条答案
按热度按时间qoefvg9y1#
考虑到它可能会作为一个查询来执行,这并不是很糟糕,因为查询集求值比较慢。如果已经有
.filter()
,可以跳过.all()
。但是,有一种更方便的方法可以做到这一点,即使用跨关系的查找。