diff gpp/news/models.py @ 54:e249b5f9d180

#3, #4: clear caches when saving profile, bulletins, and news. Broke up the stuff on the home page for finer control of caching.
author Brian Neal <bgneal@gmail.com>
date Tue, 23 Jun 2009 00:11:00 +0000
parents e66e718e1e1e
children 5c889b587416
line wrap: on
line diff
--- a/gpp/news/models.py	Sun Jun 21 22:41:58 2009 +0000
+++ b/gpp/news/models.py	Tue Jun 23 00:11:00 2009 +0000
@@ -5,83 +5,89 @@
 import datetime
 from django.db import models
 from django.contrib.auth.models import User
+from django.core.cache import cache
 from tagging.fields import TagField
 
 
 class Category(models.Model):
-   """News stories belong to categories"""
-   title = models.CharField(max_length = 64)
-   icon = models.ImageField(upload_to='news/categories/', blank=True)
+    """News stories belong to categories"""
+    title = models.CharField(max_length = 64)
+    icon = models.ImageField(upload_to='news/categories/', blank=True)
 
-   def __unicode__(self):
-      return self.title
+    def __unicode__(self):
+        return self.title
 
-   def num_stories(self):
-      return News.objects.filter(category = self.pk).count()
+    def num_stories(self):
+        return News.objects.filter(category = self.pk).count()
 
-   class Meta:
-      verbose_name_plural = 'Categories'
-      ordering = ('title', )
+    class Meta:
+        verbose_name_plural = 'Categories'
+        ordering = ('title', )
 
 
 class PendingStory(models.Model):
-   """Stories submitted by users are held pending admin approval"""
-   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(auto_now_add=True, db_index=True)
-   allow_comments = models.BooleanField(default=True)
-   approved = models.BooleanField(default=False)
-   tags = TagField()
+    """Stories submitted by users are held pending admin approval"""
+    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(auto_now_add=True, db_index=True)
+    allow_comments = models.BooleanField(default=True)
+    approved = models.BooleanField(default=False)
+    tags = TagField()
 
-   def save(self, force_insert = False, force_update = False):
-      if self.approved:
-         Story.objects.create(title=self.title,
-               submitter=self.submitter,
-               category=self.category,
-               short_text=self.short_text,
-               long_text=self.long_text,
-               allow_comments=self.allow_comments,
-               date_published=datetime.datetime.now(),
-               tags=self.tags)
-         self.delete()
-      else:
-         super(PendingStory, self).save(force_insert, force_update)
+    def save(self, force_insert = False, force_update = False):
+        if self.approved:
+            Story.objects.create(title=self.title,
+                    submitter=self.submitter,
+                    category=self.category,
+                    short_text=self.short_text,
+                    long_text=self.long_text,
+                    allow_comments=self.allow_comments,
+                    date_published=datetime.datetime.now(),
+                    tags=self.tags)
+            self.delete()
+            cache.delete('home_news')
+        else:
+            super(PendingStory, self).save(force_insert, force_update)
 
-   def __unicode__(self):
-      return self.title
+    def __unicode__(self):
+        return self.title
 
-   class Meta:
-      ordering = ('-date_submitted', )
-      verbose_name_plural = 'Pending Stories'
+    class Meta:
+        ordering = ('-date_submitted', )
+        verbose_name_plural = 'Pending Stories'
 
 
 class Story(models.Model):
-   """Model for news stories"""
-   title = models.CharField(max_length=255)
-   submitter = models.ForeignKey(User)
-   category = models.ForeignKey(Category)
-   short_text = models.TextField()
-   long_text = models.TextField(blank=True)
-   allow_comments = models.BooleanField(default=True)
-   date_published = models.DateTimeField(db_index=True)
-   tags = TagField()
+    """Model for news stories"""
+    title = models.CharField(max_length=255)
+    submitter = models.ForeignKey(User)
+    category = models.ForeignKey(Category)
+    short_text = models.TextField()
+    long_text = models.TextField(blank=True)
+    allow_comments = models.BooleanField(default=True)
+    date_published = models.DateTimeField(db_index=True)
+    tags = TagField()
 
-   @models.permalink
-   def get_absolute_url(self):
-      return ('news.views.story', [str(self.id)])
+    @models.permalink
+    def get_absolute_url(self):
+        return ('news.views.story', [str(self.id)])
 
-   def __unicode__(self):
-      return self.title
+    def __unicode__(self):
+        return self.title
 
-   class Meta:
-      ordering = ('-date_published', )
-      verbose_name_plural = 'Stories'
+    class Meta:
+        ordering = ('-date_published', )
+        verbose_name_plural = 'Stories'
 
-   def can_comment_on(self):
-      now = datetime.datetime.now()
-      delta = now - self.date_published
-      return delta.days < 30
+    def can_comment_on(self):
+        now = datetime.datetime.now()
+        delta = now - self.date_published
+        return delta.days < 30
 
+    def save(self, force_insert=False, force_update=False):
+        super(Story, self).save(force_insert, force_update)
+        cache.delete('home_news')
+