Skip to main content
 首页 » 编程设计

python之查询中的 Django

2024年10月24日36bluestorm

当使用 Django 查询集时。可以使用 in 操作或其他方法来维护对象之间的一对一映射。

For example I would like:

id_list = [12,2,33] Foo.objects.filter(id__in=id_list)

To preserve order and return None when one of the ids is missing, eg:

ret = [Foo(id=12), None, Foo(id=33)]

where Foo(id=2) doesn't exist.

目前,我唯一的方法是创建一个中间字典。 例如:

map = {o.id: o for o in Foo.objects.filter(id__in=id_list)} 
ret = [map.get(id, None) for id in id_list] 

请您参考如下方法:

没有一种简单的方法可以按顺序获取实例,并且需要为丢失的对象返回 None 使它变得更加棘手。

您可以使用 in_bulk()稍微简化您的代码。

bulk_foos = Foo.objects.in_bulk(id_list)  # returns a dict of foos, keyed on id 
ordered_foos = [bulk_foos.get(foo_id, None) for foo_id in id_list)]