X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=influences%2Fmodels.py;h=089e2a37e6a54a7553fd25cedac5ebdd78736b03;hb=0659a435b24581c2c38d609231c14f61503273b7;hp=c513c1a5c307e3f29b9365c12252fac42e8acc78;hpb=fe2d9095c7819fbe98ae1448a8aba1094090cdd8;p=matthijs%2Fprojects%2Fxerxes.git diff --git a/influences/models.py b/influences/models.py index c513c1a..089e2a3 100644 --- a/influences/models.py +++ b/influences/models.py @@ -23,7 +23,7 @@ class Character(models.Model): name = models.CharField(max_length=255, verbose_name = _("Name")) status = models.CharField(max_length=2, choices=STATUS_CHOICES, default='N', verbose_name = _("Status")) player = models.ForeignKey(User, verbose_name = _("Player")) - contacts = models.ManyToManyField('self') + contacts = models.ManyToManyField('self', blank = True) type = models.CharField(max_length=2, choices=TYPE_CHOICES, verbose_name=_("Type")) def __unicode__(self): @@ -51,7 +51,7 @@ class Influence(models.Model): other_characters = models.ManyToManyField(Character, blank = True, verbose_name = _("Involved characters"), related_name='influences_involved_in') summary = models.CharField(max_length=255, verbose_name = _("Summary")) description = models.TextField(verbose_name = _("Description")) - todo = models.TextField(verbose_name = _("Todo")) + todo = models.TextField(blank=True, verbose_name = _("Todo")) status = models.CharField(max_length=1, choices=STATUS_CHOICES, default='N', verbose_name = _("Status")) longterm = models.BooleanField(default=False, verbose_name = _("Long term")) @@ -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")