from django.template import Template as DjangoTemplate
from django.template import TemplateDoesNotExist
from django.template import Context, RequestContext
-from django.core.exceptions import ObjectDoesNotExist, ValidationError
+from django.core.exceptions import ObjectDoesNotExist
try:
import json
except ImportError:
return (obj, remainder)
raise self.model.DoesNotExist('%s matching query does not exist.' % self.model._meta.object_name)
+
class TreeModel(models.Model):
objects = TreeManager()
parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
path = getattr(self, field, '?')
parent = self.parent
while parent:
- self.validate_parent(parent)
path = getattr(parent, field, '?') + pathsep + path
parent = parent.parent
return path
class Meta:
abstract = True
-
- def validate_parents(self, parent=None):
- if parent == None:
- parent = self.parent
-
- while parent:
- try:
- self.validate_parent(parent)
- parent = parent.parent
- except ObjectDoesNotExist:
- return # because it likely means the child doesn't exist
-
- def validate_parent(self, parent):
- #Why doesn't this stop the Admin site from saving a model with itself as parent?
- if self == parent:
- raise ValidationError("A %s can't be its own parent." % self.__class__.__name__)
-
- def clean(self):
- super(TreeModel, self).clean()
- self.validate_parents()
-
- def save(self, *args, **kwargs):
- self.clean()
- super(TreeModel, self).save(*args, **kwargs)
class TreeEntity(TreeModel, Entity):
@property
def instance(self):
return self.instance_type.get_object_for_this_type(id=self.id)
-
- def validate_parent(self, parent):
- if self.instance == parent.instance:
- raise ValidationError("A %s can't be its own parent." % self.__class__.__name__)
def get_path(self, pathsep='/', field='slug'):
path = getattr(self.instance, field, '?')