Mercurial > public > sg101
view gpp/news/models.py @ 348:d1b11096595b
Fix #168; when nailing a spammer, clear their profile text fields. Guard against topics and forums that don't exist when deleting posts in the signal handler. Make the forum stats template tag only display the latest active users.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Wed, 02 Mar 2011 02:18:28 +0000 |
parents | d424b8bae71d |
children | 53fdaf0da539 |
line wrap: on
line source
""" Models for the news application. """ import datetime from django.db import models from django.contrib.auth.models import User from tagging.fields import TagField class Category(models.Model): """News stories belong to categories""" title = models.CharField(max_length=64) slug = models.SlugField(max_length=64) icon = models.ImageField(upload_to='news/categories/', blank=True) def __unicode__(self): return self.title def num_stories(self): return News.objects.filter(category = self.pk).count() class Meta: verbose_name_plural = 'Categories' ordering = ('title', ) class StoryBase(models.Model): """Abstract model to collect common fields.""" title = models.CharField(max_length=255) submitter = models.ForeignKey(User) category = models.ForeignKey(Category) short_text = models.TextField() long_text = models.TextField(blank=True) date_submitted = models.DateTimeField(db_index=True) allow_comments = models.BooleanField(default=True) tags = TagField() front_page_expiration = models.DateField(null=True, blank=True) update_date = models.DateTimeField(db_index=True, blank=True) class Meta: abstract = True class PendingStory(StoryBase): """Stories submitted by users are held pending admin approval""" def save(self, *args, **kwargs): if not self.pk: if not self.date_submitted: self.date_submitted = datetime.datetime.now() self.update_date = self.date_submitted else: self.update_date = datetime.datetime.now() super(PendingStory, self).save(*args, **kwargs) def __unicode__(self): return self.title class Meta: ordering = ('-date_submitted', ) verbose_name_plural = 'Pending Stories' class Story(StoryBase): """Model for news stories""" @models.permalink def get_absolute_url(self): return ('news.views.story', [str(self.id)]) def __unicode__(self): return self.title class Meta: ordering = ('-date_submitted', ) verbose_name = 'news story' verbose_name_plural = 'news stories' def save(self, *args, **kwargs): if not self.pk: self.date_submitted = datetime.datetime.now() self.update_date = self.date_submitted else: self.update_date = datetime.datetime.now() super(Story, self).save(*args, **kwargs) def can_comment_on(self): now = datetime.datetime.now() delta = now - self.date_submitted return self.allow_comments and delta.days < 30 def search_title(self): return self.title def search_summary(self): return u"\n".join((self.short_text, self.long_text))