【问题标题】:Get attribute list after a django query filter在 Django 查询过滤器之后获取属性列表
【发布时间】: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!!!它工作得很好。

标签: python django model


【解决方案1】:

我实施了@Dark_FirefoX 建议的解决方案并且效果很好。

def view_watchlist(request):
watchlist = Auction.objects.filter(watchlist__user=user)
return render(request, "auctions/index.html", {
    "listings": watchlist,
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2021-03-05
    • 2021-08-17
    • 1970-01-01
    • 2014-03-31
    • 2017-02-13
    • 1970-01-01
    相关资源
    最近更新 更多