how to create an empty queryset and to add objects manually in django
我需要创建一个查询集,并手动添加从不同查询结果中获得的一些对象,以便将其显示在表中。我使用xx=set(),但它不起作用。
- 你能出示相关代码吗?
- 如何创建空查询集:docs.djangoproject.com/en/dev/ref/models/queryset/none
- 如何向其中添加对象?
- 你说"一些对象"是对以前的查询集的成员进行评估,还是仅仅是指你想链接在一起的"各种查询集"?
- 要在表中显示的各种查询集结果
- 此答案可能有帮助:链接
- 我不明白为什么这个问题会有这么多的赞成票——甚至不清楚这个人在问什么。
- 你能完成吗?甚至我想传递一个自定义列表而不是一个查询列表。
您可以使用以下方法之一进行此操作:
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 |
号
但是,这对于切片查询集不起作用。
- 如何动态添加?
- 动态创建一个列表,然后一次附加它。
- 实际上,你不需要noneqs。您可以简单地创建一个列表并在上下文中传递它。
- 不工作。类型(qs)=列表
- @DZ210你想做什么?=是赋值,=是相等检查。
- @Karthikr我试图从对象列表中手动创建一个查询集。我的评论有点简明扼要。qs的类型仍然是您给出的第一个代码示例中的一个列表-现在看它应该是显而易见的。
- 你能完成吗?甚至我想传递一个自定义列表而不是一个查询列表。我不能用链式法工作。
- 你能完成吗?甚至我想传递一个自定义列表而不是一个查询列表。我不能使用这个列表方法工作。它在管理视图中给了我一个valueerror。我在filter>queryset(self, request, queryset)中使用这个自定义列表是一个已创建的列表,而不是一个查询集
你不能那样做。查询集是数据库查询的表示形式。不能手动向其中添加项目。
但是,如果需要任意排序的模型实例集合,只需使用一个列表。
- 列表有问题,无法在从模型创建的表上显示它
- 我不知道那是什么意思。显示一些代码。
- 对于x x中的x:query=xx.objects.filter(id=x.id)lisst.append(query)table=getxtable(lisst)
- 我是不是应该猜一下getXtable是什么,或者为什么它不起作用?
- 你能完成吗?甚至我想传递一个自定义列表而不是一个查询列表。我不能使用这个列表方法工作。它在管理视图中给了我一个valueerror。我在filter>queryset(self, request, queryset)中使用这个自定义列表是一个已创建的列表,而不是一个查询集
我真的迟到了,但是为了将来的参考,您可以为具有特定属性的对象创建一个带有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] |
。
- unwanted_ids = [obj.id for obj in qs if not obj.foo]意味着大量访问数据库。试试unwanted_ids=SomeModel.objects.filter(foo=False).values_list('id', flat=True)。
- @我澄清了我的答案。希望它现在更有意义!
- 我仍然认为您所做的列表理解会将对象带到python端,可能只需要一次,但带上整个对象对数据库来说要比带一个values_list更重要。
- @Mehmet不能在值列表上调用方法。