diff options
Diffstat (limited to 'askbot/models/tag.py')
-rw-r--r-- | askbot/models/tag.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/askbot/models/tag.py b/askbot/models/tag.py index a13de661..06171067 100644 --- a/askbot/models/tag.py +++ b/askbot/models/tag.py @@ -82,6 +82,53 @@ class TagManager(BaseQuerySetManager): def get_query_set(self): return TagQuerySet(self.model) +#todo: implement this +#class GroupTagQuerySet(models.query.QuerySet): +# """Custom query set for the group""" +# def __init__(self, model): +def clean_group_name(name): + """group names allow spaces, + tag names do not, so we use this method + to replace spaces with dashes""" + return re.sub('\s+', '-', name.strip()) + +class GroupTagManager(TagManager): + """manager for group tags""" + +# def get_query_set(self): +# return GroupTagQuerySet(self.model) + + def get_or_create(self, group_name = None, user = None): + """creates a group tag or finds one, if exists""" + #todo: here we might fill out the group profile + + #replace spaces with dashes + group_name = clean_group_name(group_name) + try: + tag = self.get(name = group_name) + except self.model.DoesNotExist: + tag = self.model(name = group_name, created_by = user) + tag.save() + from askbot.models.user import GroupProfile + group_profile = GroupProfile(group_tag = tag) + group_profile.save() + return tag + + #todo: maybe move this to query set + def get_for_user(self, user = None): + return self.filter(user_memberships__user = user) + + #todo: remove this when the custom query set is done + def get_all(self): + return self.annotate( + member_count = models.Count('user_memberships') + ).filter( + member_count__gt = 0 + ) + + def get_by_name(self, group_name = None): + return self.get(name = clean_group_name(group_name)) + class Tag(models.Model): name = models.CharField(max_length=255, unique=True) created_by = models.ForeignKey(User, related_name='created_tags') @@ -92,7 +139,14 @@ class Tag(models.Model): deleted_at = models.DateTimeField(null=True, blank=True) deleted_by = models.ForeignKey(User, null=True, blank=True, related_name='deleted_tags') + tag_wiki = models.OneToOneField( + 'Post', + null=True, + related_name = 'described_tag' + ) + objects = TagManager() + group_tags = GroupTagManager() class Meta: app_label = 'askbot' |