2024-05-16 13:52:00 发布
网友
似乎django queryset的行为类似于python列表。
但据我所知,它不支持list的.append()方法。
我想做的是:
from my_django_app.models import MyModel queryset = MyModel.objects.none() queryset.append(MyModel.objects.first()) ## no list's .append() method!
有没有方法将模型实例添加到现有的queryset?
Queryset不是一个list
list
所以
to_list = queryset.values()
合并queryset
queryset
from itertools import chain result_queryset = list(chain(queryset1, queryset2))
或
querysets = [queryset1, queryset2] result_queryset = list(chain(*querysets))
还可以使用|运算符创建联合:
|
queryset = MyModel.objects.none() instance = MyModel.objects.first() queryset |= MyModel.objects.filter(pk=instance.pk)
但请注意,这将根据您以这种方式附加的项目数生成不同的查询,从而使已编译查询的缓存效率低下。
不,queryset是一个查询的表示,因此是一个名称,而不是实例的任意集合。
如果您确实需要一个实际的queryset而不是一个列表,那么可以尝试累积所需对象的id,然后通过__in查询获取这些对象:
__in
list_of_ids = [] list_of_ids.append(my_id) ... queryset = MyModel.objects.filter(id__in=list_of_ids)
不过,这不是很有效。
Queryset不是一个
list
所以
合并
queryset
或
还可以使用
|
运算符创建联合:但请注意,这将根据您以这种方式附加的项目数生成不同的查询,从而使已编译查询的缓存效率低下。
不,queryset是一个查询的表示,因此是一个名称,而不是实例的任意集合。
如果您确实需要一个实际的queryset而不是一个列表,那么可以尝试累积所需对象的id,然后通过
__in
查询获取这些对象:不过,这不是很有效。
相关问题 更多 >
编程相关推荐