From eb2b5fc938fcc2fdc290da0b4a94ddbd9ed5cc76 Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Fri, 16 Jan 2009 22:16:34 +0100 Subject: [PATCH] Add a Influence.related_players property. This is a derived property that lists all the players that are involved in an Influence, together with their Chracters. --- influences/models.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/influences/models.py b/influences/models.py index c513c1a..2c62626 100644 --- a/influences/models.py +++ b/influences/models.py @@ -101,6 +101,23 @@ class Influence(models.Model): if (self.other_contacts): chars.extend(map(strip,self.other_contacts.split(','))) return chars + + @property + def related_players(self): + """ Returns all players to this Influence (ie, the players of the + initiator or involved characters). Returns a dict where the + players (User objects) are keys and a list of Character objects + for which this player is related is the value. + """ + players = {self.initiator.player : [self.initiator]} + for char in self.other_characters.all(): + # Add this character to the player's list of characters for + # this Influence, creating a new list if this is the first + # character. + chars = players.get(char.player, []) + chars.append(char) + players[char.player] = chars + return players class Meta: verbose_name = _("Influence") -- 2.30.2