如何将模型实例添加到Django queryset?

2024-05-16 13:52:00 发布

您现在位置:Python中文网/ 问答频道 /正文

似乎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?


Tags: django方法fromimportnoneapp列表objects
3条回答

Queryset不是一个list

所以

to_list = queryset.values()

合并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查询获取这些对象:

list_of_ids = []
list_of_ids.append(my_id)
...
queryset = MyModel.objects.filter(id__in=list_of_ids)

不过,这不是很有效。

相关问题 更多 >