gremmie@1: ''' gremmie@1: This module contains the models for the weblinks application. gremmie@1: ''' gremmie@1: gremmie@1: from django.db import models gremmie@1: from django.contrib import auth gremmie@1: gremmie@1: gremmie@1: class Category(models.Model): gremmie@1: '''Links belong to categories''' gremmie@1: title = models.CharField(max_length = 64) gremmie@1: description = models.TextField(blank = True) gremmie@1: gremmie@1: def __unicode__(self): gremmie@1: return self.title gremmie@1: gremmie@1: def num_links(self): gremmie@1: return Link.public_objects.filter(category = self.pk).count() gremmie@1: gremmie@1: class Meta: gremmie@1: verbose_name_plural = 'Categories' gremmie@1: ordering = ('title', ) gremmie@1: gremmie@1: gremmie@1: class PublicLinkManager(models.Manager): gremmie@1: """The manager for all public links.""" gremmie@1: def get_query_set(self): gremmie@1: return super(PublicLinkManager, self).get_query_set().filter(is_public=True) gremmie@1: gremmie@1: gremmie@1: class Link(models.Model): gremmie@1: '''Model to represent a web link''' gremmie@1: category = models.ForeignKey(Category) gremmie@1: title = models.CharField(max_length=128) gremmie@1: url = models.URLField(verify_exists=False, db_index=True) gremmie@1: description = models.TextField(blank=True) gremmie@1: user = models.ForeignKey(auth.models.User) gremmie@1: date_added = models.DateField(auto_now_add=True) gremmie@1: hits = models.IntegerField(default=0) gremmie@1: is_public = models.BooleanField(default=False, db_index=True) gremmie@1: gremmie@1: # Managers: gremmie@1: objects = models.Manager() gremmie@1: public_objects = PublicLinkManager() gremmie@1: gremmie@1: def __unicode__(self): gremmie@1: return self.title gremmie@1: gremmie@1: class Meta: gremmie@1: ordering = ('title', ) gremmie@1: gremmie@1: gremmie@1: class FlaggedLinkManager(models.Manager): gremmie@1: gremmie@1: def create(self, link, user): gremmie@1: flagged_link = FlaggedLink(link = link, user = user, approved = False) gremmie@1: flagged_link.save() gremmie@1: gremmie@1: gremmie@1: class FlaggedLink(models.Model): gremmie@1: '''Model to represent links that have been flagged as broken by users''' gremmie@1: link = models.ForeignKey(Link) gremmie@1: user = models.ForeignKey(auth.models.User) gremmie@1: date_flagged = models.DateField(auto_now_add = True) gremmie@1: approved = models.BooleanField(default = False, gremmie@1: help_text = 'Check this and save to remove the referenced link from the database') gremmie@1: gremmie@1: objects = FlaggedLinkManager() gremmie@1: gremmie@1: def save(self, force_insert = False, force_update = False): gremmie@1: if self.approved: gremmie@1: self.link.delete() gremmie@1: self.delete() gremmie@1: else: gremmie@1: super(FlaggedLink, self).save(force_insert, force_update) gremmie@1: gremmie@1: def url(self): gremmie@1: return self.link.url gremmie@1: gremmie@1: def __unicode__(self): gremmie@1: return self.link.title gremmie@1: gremmie@1: class Meta: gremmie@1: ordering = ('-date_flagged', )