在Django项目中,我有一个python的元组列表,如下所示:
users_and_values = [(user_id,value),(user_id,value),......]
其中value
可以是0.0或1.0(浮点数)。鉴于此列表,我需要创建一个新列表,如下所示:
[(user_object,value),(user_object,value),......]
其中user_object
是与每个user_id
关联的对象(包含用户属性等)。
实现这一目标的最有效方法是什么(性能和正确性都很重要)?目前,我正试图在Django视图中实现如下:
user_ids = [user_id for user_id, value in users_and_values]
user_objs = User.objects.filter(id__in=user_ids)
context["votes"] = [(user_objs(user_id),value) for user_id, value in users_and_votes]
这给了我错误:
'查询集'对象不可调用
我也可以试过[(User.object.get(id=user_id),value) for user_id, value in users_and_values]
,但这会是太多的DB调用。那么,任何人都可以说出我做错了什么,以及正确的解决方案吗?提前致谢。
答案 0 :(得分:2)
user_objs
是一个无序的用户集合。您必须通过迭代将用户ID手动映射到相应的值:
user_ids = [user_id for user_id, value in users_and_values]
user_objs = User.objects.filter(id__in=user_ids)
ids_to_values = dict(users_and_values) # {id1: value1, ...}
context["votes"] = [(user, ids_to_values[user.id]) for user in user_objs]