Hi Tane,

[untested with Many2Many, but should work, it works for ForeignKeys]

In your Entry save() method call the save method of each of your related
categories after you do your super().save()

{{{
class Entry(models.Model):
    ...
    def save(self):
        if not self.slug:
            self.slug = slugify(self.title)
        super(Entry, self).save()
        for category in self.categories:
            category.save()
    ...
}}}

Then in the save method for your Category object you need to calculate
the number of entries in that category before you call super().save()

{{{
class Category(models.Model):
    ...
    def save(self):
        if not self.slug:
            self.slug = slugify(self.name)
        self.num_entries = self.entry_set.count()
        super(Category, self).save()
    ...
}}}

Hope that helps, or at least gives you a pointer.

Regards
Darryl



Tane Piper wrote:
> Here is my blog application, which contains the two models:
> 
> from django.db import models
> from django.db.models import permalink
> from django.core import urlresolvers
> from django.contrib.auth.models import User
> from django.template.defaultfilters import slugify
> 
> import datetime
> # Create your models here.
> 
> class Category(models.Model):
>     """ A Category is a way to manage the taxonomy of the site"""
>     name=models.CharField(max_length=50) #The name of the category
>     description=models.TextField()
>     slug=models.CharField(max_length=75, null=True, blank=True)
>     active=models.BooleanField()
>     generate_feed=models.BooleanField()
>     parent=models.ForeignKey('self', null=True, blank=True)
>     def __unicode__(self):
>         return self.name
>     def save(self):
>         if not self.slug:
>             self.slug = slugify(self.name)
>         super(Category, self).save()
>     def num_entries(self):
>         """Returns the number of entries in this category"""
>         return self.entry_set.count()
>     num_entries.short_description = "Number of Entries"
>     def get_absolute_url(self):
>         """Get the URL of this entry to create a permalink"""
>         return ('cat-detail', (), {
>             "slug": self.slug
>             })
>     get_absolute_url = permalink(get_absolute_url)
>     class Meta:
>         verbose_name_plural = 'Categories'
>     class Admin:
>         fields = (
>                   ('Category Details', {'fields': ('name',
> 'description', 'parent',)}),
>                   ('Category Settings', {'fields': ('active',
> 'generate_feed', 'slug',)}),
>         )
>         list_display = ('name', 'slug', 'active', 'generate_feed',
> 'num_entries', 'parent',)
>         search_fields = ['name','parent']
> 
> PUBLISHED_CHOICES = (
>     (0, 'Draft'),
>     (1, 'Pending Review'),
>     (2, 'Published'),
>     (3, 'Archived'),
> )
> 
> class Entry(models.Model):
>     title=models.CharField(max_length=255)
>     body=models.TextField()
>     user=models.ForeignKey(User)
>     slug=models.CharField(max_length=75, null=True, blank=True)
>     pub_date=models.DateTimeField('date published')
>     published=models.IntegerField(max_length=1,
> choices=PUBLISHED_CHOICES, verbose_name="Publishing Status")
>     front_page=models.BooleanField(default=True)
>     sticky=models.BooleanField()
>     allow_comments=models.BooleanField(default=True)
>     truncate=models.BooleanField()
>     categories=models.ManyToManyField(Category, limit_choices_to = 
> {'active':1})
>     def save(self):
>         if not self.slug:
>             self.slug = slugify(self.title)
>         super(Entry, self).save()
>     def __unicode__(self):
>         return "%s" % self.title
>     def was_published_today(self):
>         """Flag to show if post was published today"""
>         return self.pub_date.date() == datetime.date.today()
>     was_published_today.short_description = 'Published today?'
>     def is_published(self):
>         return bool(self.published==2)
>     is_published.short_description = 'Has Been Published?'
>     def get_absolute_url(self):
>         """Get the URL of this entry to create a permalink"""
>         return ('news-detail', (), {
>             "slug": self.slug,
>             "year":self.pub_date.year,
>             "month":self.pub_date.strftime("%b").lower(),
>             "day":self.pub_date.day
>             })
>     get_absolute_url = permalink(get_absolute_url)
>     class Meta:
>         verbose_name_plural = 'Entries'
>         ordering = ['-pub_date']
>     class Admin:
>        fields = (
>                   ('Entry Content', {'fields': ('title', 'body',
> 'user', 'categories')}),
>                   ('Date information', {'fields': ('pub_date',)}),
>                   ('Publishing Details', {'fields': ('slug',
> 'published', 'front_page', 'allow_comments', 'sticky', 'truncate')}),
>         )
>        list_display = ('title', 'user', 'front_page', 'sticky',
> 'allow_comments', 'truncate', 'pub_date', 'is_published',
> 'was_published_today', )
>        list_filter = ['pub_date', 'categories']
>        search_fields = ['body', 'title']
>        date_hierarchy = 'pub_date'
>        ordering = ('pub_date',)
> 
> On Dec 5, 2007 6:28 PM, RajeshD <[EMAIL PROTECTED]> wrote:
>>
>>> Hope that makes sense, as if I can do it this way instead of
>>> calculating it on the view, that would make this inclusion tag so much
>>> easier.
>> What does your Entry model look like?
>>
> 
> 
> 


Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to