che*_*art 24 django django-queryset
基本上我需要一种优雅的方式来做到以下几点: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2_qs = QuerySet(model=Model2, qs_items=[obj1.model2,obj2.model2])
Run Code Online (Sandbox Code Playgroud)
我可能没有想到,但对我来说做类似下面的事似乎无比愚蠢: -
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
model2_qs = Model2.objects.filter(pk=obj1.model2.pk)
Run Code Online (Sandbox Code Playgroud)
是的,我需要最终使用Model2的QuerySet供以后使用(特别是传递给Django表单).
在上面的第一个代码块中,即使我使用filter而不是get我,显然会有一个Model1的QuerySet.在我的情况下,反向查找可能并不总是可行的.
Jud*_*ill 36
如果您只是想创建一个项目的查询集,您可以通过一些在SQL中无法表示的复杂过程来选择,那么您始终可以使用该__in运算符.
wanted_items = set()
for item in model1.objects.all():
if check_want_item(item):
wanted_items.add(item.pk)
return model1.objects.filter(pk__in = wanted_items)
Run Code Online (Sandbox Code Playgroud)
你显然必须根据你的情况调整它,但它至少应该给你一个起点.
Art*_*hur 16
要手动将对象添加到QuerySet,请尝试_result_cache:
objs = ObjModel.objects.filter(...)
len(objs) #or anything that will evaluate and hit the db
objs._result_cache.append(yourObj)
Run Code Online (Sandbox Code Playgroud)
PS:我不理解(或试图)chefsmart的问题,但我相信这回答了标题中的问题.
您无法手动将对象添加到查询集。但你为什么不把它们列在一个列表中呢?
obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
obj2 = Model1.objects.select_related('model2').get(attribute2=value2)
model2 = list(obj1, obj2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29299 次 |
| 最近记录: |