Django

Code

CookBookCategoryDataModelPostMagic: models.py

File models.py, 1.4 kB (added by anonymous, 2 years ago)
Line 
1 from django.db import models
2 from django.core import validators
3
4 # Begin Models here
5 class 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