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
class Meta:
abstract = True
- app_label = 'philo'
class TreeManager(models.Manager):
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):
class Meta:
unique_together = (('parent', 'slug'),)
abstract = True
- app_label = 'philo'
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