我有一个关系客户有很多项目。
我想创建一个表单字典:
{
'client_id': ['project_id1', 'project_id2'],
'client_id2': ['project_id7', 'project_id8'],
}
我试过的是什么;
clients_projects = Client.objects.values_list('id', 'project__id')
给了我:
<QuerySet [(3, 4), (3, 5), (3, 11), (3, 12), (2, 3), (2, 13), (4, 7), (4, 8), (4, 9), (1, 1), (1, 2), (1, 6), (1, 10)]>
我可以使用list(clients_projects)
转换为列表:
[(3, 4),
(3, 5),
(3, 11),
(3, 12),
(2, 3),
(2, 13),
(4, 7),
(4, 8),
(4, 9),
(1, 1),
(1, 2),
(1, 6),
(1, 10)]
答案 0 :(得分:1)
假设projects
是附加到ReverseManyToOneDescriptor
模型的Client
,您可以写下:
clients_projects = { c.id : c.projects.values_list('id', flat=True) for c in Client.objects.all() }
答案 1 :(得分:1)
此问题与此问题非常相似:Django GROUP BY field value 由于Django没有提供group_by(你),你需要手动复制行为:
result = {}
for client in Client.objects.all().distinct():
result[client.id] = Client.objects.filter(id=client.id)
.values_list('project__id', flat=True)
<强>故障:强>
Client
模型中获取一组不同的客户端并迭代它们。.order_by('id')
来订购该集合。 / em>的)project__id
作为列表,因此您可以使用values_list()
的flat=True
参数,该参数会返回值列表。最后,result
将如下所示:
{
'client_1_id': [1, 10, ...],
'client_5_id': [2, 5, ...],
...
}
有一个模块宣称要向Django添加GROUP BY功能:https://github.com/kako-nawao/django-group-by,但我还没有使用它,所以我只是在这里列出它而不是实际推荐它。