]> git.openstreetmap.org Git - osqa.git/blob - forum/models/tag.py
Some improvements in cache.
[osqa.git] / forum / models / tag.py
1 from base import *
2
3 from django.utils.translation import ugettext as _
4 import django.dispatch
5
6 class ActiveTagManager(models.Manager):
7     def get_query_set(self):
8         return super(ActiveTagManager, self).get_query_set().exclude(deleted=False, used_count=0)
9
10
11 class Tag(BaseModel):
12     name            = models.CharField(max_length=255, unique=True)
13     created_by      = models.ForeignKey(User, related_name='created_tags')
14     marked_by       = models.ManyToManyField(User, related_name="marked_tags", through="MarkedTag")
15     # Denormalised data
16     used_count = models.PositiveIntegerField(default=0)
17
18     deleted     = models.BooleanField(default=False)
19     deleted_at  = models.DateTimeField(null=True, blank=True)
20     deleted_by  = models.ForeignKey(User, null=True, blank=True, related_name='deleted_%(class)ss')
21
22     active = ActiveTagManager()
23
24     def mark_deleted(self, user):
25         if not self.deleted:
26             self.deleted = True
27             self.deleted_at = datetime.datetime.now()
28             self.deleted_by = user
29             self.save()
30             return True
31         else:
32             return False
33
34     def unmark_deleted(self):
35         if self.deleted:
36             self.deleted = False
37             self.save()
38             return True
39         else:
40             return False
41
42     class Meta:
43         ordering = ('-used_count', 'name')
44         app_label = 'forum'
45
46     def __unicode__(self):
47         return self.name
48
49 class MarkedTag(models.Model):
50     TAG_MARK_REASONS = (('good',_('interesting')),('bad',_('ignored')))
51     tag = models.ForeignKey(Tag, related_name='user_selections')
52     user = models.ForeignKey(User, related_name='tag_selections')
53     reason = models.CharField(max_length=16, choices=TAG_MARK_REASONS)
54
55     class Meta:
56         app_label = 'forum'
57