35

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

4

3 回答 3

35

您可以通过以下方式之一执行此操作:

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))

你也可以这样做:

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

但是,这不适用于切片查询集

于 2013-08-15T14:57:55.423 回答
14

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

但是,如果您需要任意有序的模型实例集合,只需使用列表即可。

于 2013-08-15T15:14:26.187 回答
13

我真的来晚了,但是为了将来的参考,您可以创建一个查询集,然后过滤具有特定属性的对象。

过滤字段对象属性

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

过滤非字段对象属性

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]
于 2015-05-20T19:46:05.577 回答