我有2张桌子:地下城和怪物。 在地下城里,我有2条记录和4条怪物记录。每个怪物都有一个外键,可以将它与某个地牢联系起来。
我需要获得一个地牢列表,这样每个地牢都会有一个列表,其中包含所有生活在其中的怪物。
我尝试这样做:
dungeons = list(Dungeons.select().join(Monsters))
它返回4个条目: 1.地牢1怪物1 地牢1怪物2 3.地牢2怪物3 4.地牢2怪物4
但我需要这样的事情: 地牢1 [monster1,monster2] 2.地下城2 [monster3,monster4]
答案 0 :(得分:1)
有一种更有效的方法:使用prefetch()
。它记录在"Avoiding N+1 queries" section。
query = prefetch(Dungeon.select(), Monster.select())
for dungeon in query:
print dungeon.name
for monster in dungeon.monsters_prefetch: # This is a list of monsters
print ' *', monster.name
答案 1 :(得分:0)
不熟悉peewee,但你能用字典吗?
dungeons = {}
results = Dungeons.select().join(Monsters))
for row in results:
if row.dungeon not in dungeons:
dungeons[row.dungeon] = []
dungeons[row.dungeon].append(row.monster)