Categories & Subcategories With Django

Meta: December 11th 2008 // Django // 206 views

class Category(models.Model):
name = models.CharField(core=True, maxlength=200)
slug = models.SlugField(prepopulate_from=('name',))
parent = models.ForeignKey('self', blank=True, null=True, related_name='child')
description = models.TextField(blank=True,help_text="Optional")

class Admin:
list_display = ('name', '_parents_repr')

def __str__(self):
p_list = self._recurse_for_parents(self)
p_list.append(self.name)
return self.get_separator().join(p_list)

def get_absolute_url(self):
if self.parent_id:
return "/tag/%s/%s/" % (self.parent.slug, self.slug)
else:
return "/tag/%s/" % (self.slug)

def _recurse_for_parents(self, cat_obj):
p_list = []
if cat_obj.parent_id:
p = cat_obj.parent
p_list.append(p.name)
more = self._recurse_for_parents(p)
p_list.extend(more)
if cat_obj == self and p_list:
p_list.reverse()
return p_list

def get_separator(self):
return ' :: '

def _parents_repr(self):
p_list = self._recurse_for_parents(self)
return self.get_separator().join(p_list)
_parents_repr.short_description = "Tag parents"

 

def save(self):
p_list = self._recurse_for_parents(self)
if self.name in p_list:
raise validators.ValidationError("You must not save a category in itself!")
super(Category, self).save()

http://code.djangoproject.com/wiki/CookBookCategoryDataModelPostMagic

Tags: , ,

WeDecal.com

Postscript: Leave A Comment // Subscribe (RSS Feed)

Want To Be Heard? Comment Here!

// I Love Comments, Especially Nice Ones

Who Are You?

Your Email Address

Your Website

:D :) :o :eek: :( :lol: :wink: :arrow: :idea: :?: :!: :evil: :p

You can follow any responses to this entry via its RSS comments feed. You may also leave a trackback by clicking this link.