Sve*_*ven 5 python sqlite django django-queryset
假设我有一个模型My_model,并且有该模型的 id 列表;
my_ids = [3,2,1,42]
Run Code Online (Sandbox Code Playgroud)
现在我想获得一个带有My_model.objectsid 的 QuerySet。我已经找到了这个解决方案,但它对我不起作用,因为我希望 QuerySet 中的对象与my_ids.
如何在 Django 和 Python 中转换 QuerySet 中的 id 列表?
它确实不关心顺序,因为查询如下所示:
SELECT model.*
FROM model
WHERE model.pk IN (3, 2, 1, 42)Run Code Online (Sandbox Code Playgroud)
数据库可以按照它想要的任何顺序返回值。根据您使用的数据库、索引机制等,顺序可以是“确定性的”,但它甚至有可能返回完全随机的记录。
您可以使用相当复杂的表达式来订购这些:
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(
*[When(pk=pk, then=Value(i)) for i, pk in enumerate(my_ids)],
output_field=IntegerField()
).asc()
)Run Code Online (Sandbox Code Playgroud)
这仍然是QuerySet, ,并且可以用于惰性查询目的,但问题仍然是为什么要根据主键的顺序对元素进行排序。通常模型(或相关模型)包含更“有趣”的元素排序方式。
| 归档时间: |
|
| 查看次数: |
2818 次 |
| 最近记录: |