2015-09-12 5 views
2

У меня есть 2 стола: подземелья и монстры. В подземельях у меня есть 2 записи и 4 записи в монстрах. У каждого монстра есть ключевой ключ, связывающий его с определенным подземельем.Как добавить список объединенных данных в peewee?

Мне нужно получить список подземелий, чтобы у каждого подземелья был свой список со всеми монстрами, которые живут в нем.

Я пытаюсь сделать это:

dungeons = list(Dungeons.select().join(Monsters)) 

возвращает 4 записи: 1. темница 1 монстра 1 2. Подземелье 1 монстра 2 3. подземелий 2 монстра 3 4. подземелий 2 монстра 4

Но мне нужно что-то вроде этого: 1. темница 1 [monster1, Monster2] 2. подземелий 2 [monster3, monster4]

ответ

0

Существует более эффективный способ: использовать 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 
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) 
Смежные вопросы