2012-04-23 11 views
0

Предположим, мы имеем следующие две модели:агрегация Джанго - Сумма двух сумм

class Player(Model): 
    alliance = ForeignKey("Alliance") 
    points = PositiveIntegerField() 

class Alliance(Model): 
    points = PositiveIntegerField() 

Каждый игрок и каждый альянс имеют определенное количество очков. Всего очков альянса - alliance.points + Sum(player_set__points).

Что я хочу сделать, это собрать все альянсы, упорядоченные по сумме суммарных очков. Проблема в том, что я, похоже, не могу сделать Sum + Sum в агрегации.

ответ

1

Вы можете денормализовать свою БД. Добавить поле sum на номер Alliance, обновить его на post_save и post_delete от Alliance и Player. Таким образом, вы будете иметь готовое к использованию значение и легко сортировать его.

+0

Хорошо, престиж игрока меняется очень часто, и из-за этого я хочу рассчитать сумму на лету. Кажется, это невозможно, не так ли? – aemdy

+0

Невозможно, вы всегда можете иметь raw sql. Но гораздо менее изящный. – ilvar

Смежные вопросы