diff --git a/django_gamification/models.py b/django_gamification/models.py index b15fcc6..08fe182 100644 --- a/django_gamification/models.py +++ b/django_gamification/models.py @@ -109,6 +109,20 @@ def save(self, *args, **kwargs): badge.points = self.points badge.save() + def award(self, interface): + """ + Awards this badge to a user. + """ + badges = interface.badge_set.filter(badge_definition=self) + if badges.exists(): + badge = badges.first() + if badge.acquired: + return + else: + badge = Badge.objects.create_badge(self, interface) + badge.award() + badge.save() + class Progression(models.Model): """ @@ -198,6 +212,9 @@ class Badge(models.Model): objects = BadgeManager() acquired_objects = AcquiredBadgesManager() + class Meta: + unique_together = ('interface', 'badge_definition') + def increment(self): if self.progression and not self.revoked: self.progression.increment()