如何创建一个空的查询集并在django中手动添加对象

how to create an empty queryset and to add objects manually in django

我需要创建一个查询集,并手动添加从不同查询结果中获得的一些对象,以便将其显示在表中。我使用xx=set(),但它不起作用。


您可以使用以下方法之一进行此操作:

1
2
3
4
5
6
from itertools import chain
#compute the list dynamically here:
my_obj_list = list(obj1, obj2, ...)
#and then
none_qs = MyModel.objects.none()
qs = list(chain(none_qs, my_obj_list))

你也可以这样做:

1
2
none_qs = MyModel.objects.none()
qs = none_qs | sub_qs_1 | sub_qs_2

但是,这对于切片查询集不起作用。


你不能那样做。查询集是数据库查询的表示形式。不能手动向其中添加项目。

但是,如果需要任意排序的模型实例集合,只需使用一个列表。


我真的迟到了,但是为了将来的参考,您可以为具有特定属性的对象创建一个带有all-then过滤器的查询集。

筛选字段对象属性

1
2
Model.objects.filter(foo='bar')
Model.objects.exclude(foo='bar')

筛选非字段对象属性

1
2
3
4
5
6
7
8
9
def return_queryset_with_desired_objects(self):
    qs = SomeModel.objects.all()
    wanted_ids = [obj.id for obj in qs if obj.foo]
    return self.filter(id__in=wanted_ids]

def return_queryset_without_undesired_objects(self):
    qs = SomeModel.objects.all()
    unwanted_ids = [obj.id for obj in qs if not obj.foo]
    return self.exclude(id__in=unwanted_ids]