Initial implementation of node_url templatetag.
[philo.git] / models / base.py
index 3482a1a..6f23191 100644 (file)
@@ -9,15 +9,18 @@ from UserDict import DictMixin
 
 class Tag(models.Model):
        name = models.CharField(max_length=250)
-       slug = models.SlugField()
+       slug = models.SlugField(unique=True)
        
        def __unicode__(self):
                return self.name
+       
+       class Meta:
+               app_label = 'philo'
 
 
 class Titled(models.Model):
        title = models.CharField(max_length=255)
-       slug = models.SlugField()
+       slug = models.SlugField(max_length=255)
        
        def __unicode__(self):
                return self.title
@@ -113,7 +116,6 @@ class Entity(models.Model):
        
        class Meta:
                abstract = True
-               app_label = 'philo'
 
 
 class TreeManager(models.Manager):
@@ -157,13 +159,29 @@ class TreeModel(models.Model):
        parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
        slug = models.SlugField()
        
-       def get_path(self, pathsep='/', field='slug'):
-               path = getattr(self, field, '?')
-               parent = self.parent
+       def has_ancestor(self, ancestor):
+               parent = self
                while parent:
-                       path = getattr(parent, field, '?') + pathsep + path
+                       if parent == ancestor:
+                               return True
                        parent = parent.parent
-               return path
+               return False
+       
+       def get_path(self, root=None, pathsep='/', field='slug'):
+               if root is not None and self.has_ancestor(root):
+                       path = ''
+                       parent = self
+                       while parent and parent != root:
+                               path = getattr(parent, field, '?') + pathsep + path
+                               parent = parent.parent
+                       return path
+               else:
+                       path = getattr(self, field, '?')
+                       parent = self.parent
+                       while parent and parent != root:
+                               path = getattr(parent, field, '?') + pathsep + path
+                               parent = parent.parent
+                       return path
        path = property(get_path)
        
        def __unicode__(self):
@@ -172,7 +190,6 @@ class TreeModel(models.Model):
        class Meta:
                unique_together = (('parent', 'slug'),)
                abstract = True
-               app_label = 'philo'
 
 
 class TreeEntity(TreeModel, Entity):
@@ -189,5 +206,4 @@ class TreeEntity(TreeModel, Entity):
                return super(TreeEntity, self).relationships
        
        class Meta:
-               abstract = True
-               app_label = 'philo'
\ No newline at end of file
+               abstract = True
\ No newline at end of file