Python django查询以检索由父名称键入的子值的字典?

Python django查询以检索由父名称键入的子值的字典?,python,django,dictionary,Python,Django,Dictionary,使用以下一对多关系模型,孩子可以收集一些玩具: 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) 我想生

使用以下一对多关系模型,孩子可以收集一些玩具:

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' ) ] }
不必像我一样首先检索元组的值列表,然后自己创建字典来迭代它们?元组列表中表示的值的结构并不重要,它可以是嵌套字典或其他东西,但我只想通过按孩子的名字键入生成的字典,为孩子提供所有玩具


提前感谢。

查询不会返回字典,但您可以通过字典理解更简洁地编写:

{kid.name: list(kid.toy_set.filter(name__in=names).values_list('name', 'material')) 
 for kid in Kid.objects.filter(toy__name__in=names)}

这可能会影响性能,具体取决于需要运行多少数据,因为它会为每个孩子运行额外的查询来获取玩具。如果是这样的话,运行查询并在Python中处理列表可能会更快。

可能是非常酷的重复,我还不知道聚合函数,谢谢。谢谢,这个解决方案对我很有效,因为我没有那么多孩子,但每个孩子都有很多玩具。:)