from django.contrib.contenttypes import generic
from django.utils import simplejson as json
from django.core.exceptions import ObjectDoesNotExist
+from philo.exceptions import AncestorDoesNotExist
from philo.utils import ContentTypeRegistryLimiter
from philo.signals import entity_class_prepared
+from philo.validators import json_validator
from UserDict import DictMixin
class Tag(models.Model):
- name = models.CharField(max_length=250)
- slug = models.SlugField(unique=True)
+ name = models.CharField(max_length=255)
+ slug = models.SlugField(max_length=255, unique=True)
def __unicode__(self):
return self.name
entity_object_id = models.PositiveIntegerField(verbose_name='Entity ID')
entity = generic.GenericForeignKey('entity_content_type', 'entity_object_id')
key = models.CharField(max_length=255)
- json_value = models.TextField(verbose_name='Value (JSON)', help_text='This value must be valid JSON.')
+ json_value = models.TextField(verbose_name='Value (JSON)', help_text='This value must be valid JSON.', validators=[json_validator])
def get_value(self):
return json.loads(self.json_value)
class TreeModel(models.Model):
objects = TreeManager()
parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
- slug = models.SlugField()
+ slug = models.SlugField(max_length=255)
def has_ancestor(self, ancestor):
parent = self
return False
def get_path(self, root=None, pathsep='/', field='slug'):
- if root is not None and self.has_ancestor(root):
+ if root is not None:
+ if not self.has_ancestor(root):
+ raise AncestorDoesNotExist(root)
path = ''
parent = self
while parent and parent != root:
abstract = True
-class TreeEntity(TreeModel, Entity):
+class TreeEntity(Entity, TreeModel):
@property
def attributes(self):
if self.parent: