Sponsor
Now Playing
- Alix Perez – I'm Free 2 hours ago
- Alix Perez – Intersections 2 hours ago
- Alix Perez – Forsaken 3 hours ago
- Glen E Ston – Ouroboros (Original Mix) 3 hours ago
- Black Sun Empire – Everything 3 hours ago
Categories & Subcategories With Django
December 11, 2008,
353 views
<code>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
Categorised under Django