gpt4 book ai didi

python - 在 Django 中从 ids 列表手动创建查询集

转载 作者:行者123 更新时间:2023-12-01 22:07:28 25 4
gpt4 key购买 nike

假设我有一个模型 My_model 并且我有该模型的 id 列表;

my_ids = [3,2,1,42]

现在我想获取一个带有 id 的 My_model.objects 的 QuerySet。我已经找到this solution ,但它对我不起作用,因为我希望 QuerySet 中的对象与 my_ids 中的 id 的顺序相同。

如何在 Django 和 Python 中转换 QuerySet 中的 id 列表?

最佳答案

它确实不关心顺序,因为查询如下:

SELECT model.*
FROM model
WHERE model.pk <b>IN (3, 2, 1, 42)</b>

数据库可以按照它想要的任何顺序返回值。根据您使用的数据库、索引机制等,顺序可以是“确定性的”,但甚至有可能它会完全随机地返回记录。

您可以使用相当复杂的表达式来订购这些:

from django.db.models import Case, IntegerField, Value, When

my_ids = [3,2,1,42]

Model.objects.filter(
pk__in=my_ids
).order_by(
Case(
*[<b>When(pk=pk, then=Value(i)) for i, pk in enumerate(my_ids)</b>],
output_field=IntegerField()
)<b>.asc()</b>
)

这仍然是一个 QuerySet,并且可用于惰性查询目的,但问题仍然是为什么要根据主元素的顺序对元素进行排序键。通常模型(或相关模型)包含更“有趣”的元素排序方式。

关于python - 在 Django 中从 ids 列表手动创建查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61686596/

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