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

时间:2013-08-15 14:50:24

标签: django django-queryset

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

3 个答案:

答案 0 :(得分:24)

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

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

但是,对于切片查询集

,这 不起作用

答案 1 :(得分:11)

你做不到。查询集是数据库查询的表示。您无法手动向其添加项目。

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

答案 2 :(得分:9)

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

过滤字段对象属性

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]