Mercurial > public > sg101
view gpp/news/models.py @ 277:d424b8bae71d
Fixing #128 and #129. Add elsewhere weblinks to search content. Add support for haystack's get_update_field() method.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sat, 02 Oct 2010 23:24:39 +0000 |
parents | 1246a4f1ab4f |
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))