【问题标题】:How to pass multiple QuerySet values into filter()如何将多个 QuerySet 值传递给 filter()
【发布时间】:2020-08-15 15:38:37
【问题描述】:

我有 3 个模型,一个是拍卖,第二个是关注列表,第三个是用户

class Auctions(models.Model):
    lot = models.CharField(max_length=64)
    owner = models.CharField(max_length=64)
    url = models.CharField(max_length=256, blank = True)
    startBid = models.IntegerField()
    description = models.CharField(max_length=64)
    category = models.CharField(max_length=64, blank = True)

class User(AbstractUser):
    pass

class Watchlist(models.Model):
    user = models.CharField(max_length=64)
    watchlist = models.CharField(max_length=64, blank = True)

观看次数:

def addToWatchlist(request, id):
    print(id, "ID")
    user = request.user
    watchlist = Watchlist.objects.filter(user = user, watchlist = id)
    data = list(watchlist)
    if data == []:
        createWatchList = Watchlist(
            user = request.user,
            watchlist = id
        )
        createWatchList.save()
    else:
        watchlist.delete()

    return redirect('listing', id=id)
    

def watchlist(request):
    id = Watchlist.objects.filter(user = request.user)
    auctions = Auctions.objects.filter(id = id)
    return render(request, "auctions/watchlist.html", {
        "auctions": auctions
    })

我收到一个错误“ValueError:精确查找的 QuerySet 值必须限制为使用切片的一个结果。” 有人可以解释如何将多个 QuerySet 值传递给 filter() 结果,我需要所有拍卖,这与监视列表相符 谢谢!

【问题讨论】:

  • 你在哪里使用了切片操作符?你能添加完整的错误回溯吗?

标签: python django django-models filter


【解决方案1】:

试试这个:

watchlist_id = Watchlist.objects.filter(user = request.user).values('id')
auctions = Auctions.objects.filter(id__in = watchlist_id).all()

这里我们首先过滤 watchlist_id,然后在拍卖表中包含 (id__in)。

【讨论】:

  • 谢谢,它有效,只是将值('id')更改为值('watchlist')
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多