【发布时间】:2018-04-13 16:49:19
【问题描述】:
使用以下具有一对多关系的模型,孩子可以收集一些玩具:
class Kid(models.Model):
name = models.CharField(max_length=200)
class Toy(models.Model):
name = models.CharField(max_length=200)
material = models.CharField(max_length=200)
owner = models.ForeignKey(Kid)
我想生成一个字典,其中孩子的名字作为键,元组列表作为值。
以下查询让我得到元组列表,如下所示:
kids = Kid.objects.all()
kids.filter( toy__name__in[ some list of names ] ).\
values_list( 'name', 'toy__name', 'toy__material' )
[ ( 'billy', 'hotwheelscar', 'metal' ),
( 'billy', 'actionFigure', 'plastic' ),
( 'sam', 'hotwheelscar', 'metal' ),
( 'sam', 'doll', 'plastic' ),
( 'sam', 'dollHouse', 'plastic' ),
( 'jimmy', 'hotwheelscar', 'metal' ),
( 'jimmy', 'actionFigure', 'plastic' ) ]
但是有没有一种方法可以让我以如下形式获得这些结果:
{ 'billy': [ ( 'hotwheelscar', 'metal' ), ( 'actionFigure', 'plastic' ) ],
'sam': [ ( 'hotwheelscar', 'metal' ), ( 'doll', 'plastic' ), ( 'dollhouse', 'plastic' ) ],
'jimmy': [ ( 'hotwheelscar', 'metal' ), ( 'actionFigure', 'plastic' ) ] }
不必像我之前那样首先检索元组的 values_list,然后自己迭代它们创建字典?元组列表中表示的值的结构并不重要,它可以是嵌套字典或其他东西,但我只想通过按孩子名字键入结果字典来为孩子提供所有玩具。
提前致谢。
【问题讨论】:
-
非常酷,我还不知道聚合函数,谢谢。
标签: python django dictionary