gpt4 book ai didi

django - 根据属性值从数据库中检索随机记录,直到达到限制,如果未达到限制,则与其他记录一起完成

转载 作者:行者123 更新时间:2023-11-29 14:30:07 26 4
gpt4 key购买 nike

我将 Django 与 Postgres 结合使用。

在一个页面上,我可以显示一个特色项目列表,比如说 10 个。

  1. 如果在数据库中我的特色项目多于 10 个,我希望让它们随机/(更好地轮换)。

  2. 如果特色项目的数量低于 10,则获取所有特色项目并添加到列表中,直到 10 个非特色项目为止。

因为随机在数据库上花费了更多时间,所以我在 python 中进行采样:

count = Item.objects.filter(is_featured=True).count()

if count >= 10:
item = random.sample(list(Item.objects.filter(is_featured=True))[:10])
else:
item = list(Item.objects.all()[:10])

上面的代码忽略了少于 10 个特征的情况(例如 8,添加 2 个非特征)。

我可以尝试添加一个新查询,但我不知道这是否是一个有效的检索,为此使用 4-5 个查询。

最佳答案

我能找到的最佳解决方案是:

 from itertools import chain
items = list(chain(Item.objects.filter(is_featured=True).order_by('?'), Item.objects.filter(is_featured=False).order_by('?')))[:10]

通过这种方式,查询集的顺序得以保留,但缺点是 items 变成了一个列表,而不是一个查询集。您可以在此 SO Answer 中查看更多详细信息.仅供引用:有一些很棒的解决方案,例如使用 Q 或管道,但它们不保留查询集的顺序。

关于django - 根据属性值从数据库中检索随机记录,直到达到限制,如果未达到限制,则与其他记录一起完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53129790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com