Code

CookBookCategoryDataModelPostMagic: models.py

File models.py, 1.4 KB (added by anonymous, 8 years ago)
Line 
1from django.db import models
2from django.core import validators
3
4# Begin Models here
5class Tag (models.Model):
6        name = models.CharField(core=True, maxlength=200)
7        slug = models.SlugField(prepopulate_from=('name',))
8        parent = models.ForeignKey('self', blank=True, null=True, related_name='child')
9        description = models.TextField(blank=True,help_text="Optional")
10       
11        class Admin:
12                list_display = ('name', '_parents_repr')
13       
14        def __str__(self):
15                p_list = self._recurse_for_parents(self)
16                p_list.append(self.name)
17                return self.get_separator().join(p_list)
18       
19        def get_absolute_url(self):
20                if self.parent_id:
21                        return "/tag/%s/%s/" % (self.parent.slug, self.slug)
22                else:
23                        return "/tag/%s/" % (self.slug)
24       
25        def _recurse_for_parents(self, cat_obj):
26                p_list = []
27                if cat_obj.parent_id:
28                        p = cat_obj.parent
29                        p_list.append(p.name)
30                        more = self._recurse_for_parents(p)
31                        p_list.extend(more)
32                if cat_obj == self and p_list:
33                        p_list.reverse()
34                return p_list
35               
36        def get_separator(self):
37                return ' :: '
38       
39        def _parents_repr(self):
40                p_list = self._recurse_for_parents(self)
41                return self.get_separator().join(p_list)
42        _parents_repr.short_description = "Tag parents"
43       
44        def save(self):
45                p_list = self._recurse_for_parents(self)
46                if self.name in p_list:
47                        raise validators.ValidationError("You must not save a category in itself!")
48                super(Tag, self).save()
49               
50