当使用 Django 查询集时。可以使用 in 操作或其他方法来维护对象之间的一对一映射。
For example I would like:
id_list = [12,2,33]Foo.objects.filter(id__in=id_list)To preserve order and return
Nonewhen 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)]
