手动创建 Django QuerySet 或者手动将对象添加到 QuerySet

2024-01-19

基本上我需要一种优雅的方式来执行以下操作:-

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

我的想法可能不对,但做类似以下的事情对我来说似乎非常愚蠢。:-

obj1 = Model1.objects.select_related('model2').get(attribute1=value1)
model2_qs = Model2.objects.filter(pk=obj1.model2.pk)

是的,我最终需要一个 Model2 的查询集以供以后使用(特别是传递到 Django 表单)。

在上面的第一个代码块中,即使我使用filter代替get显然我会有一个 Model1 的查询集。在我的情况下,反向查找可能并不总是可行。


如果您只是想创建一个项目的查询集,您可以通过一些无法用 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)

显然,您必须根据您的情况进行调整,但它至少应该为您提供一个起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

手动创建 Django QuerySet 或者手动将对象添加到 QuerySet 的相关文章

随机推荐