Last random entry before more organized approach. Added documentation/admin display...
[philo.git] / models.py
index 878d3d4..c62d7eb 100644 (file)
--- a/models.py
+++ b/models.py
@@ -10,7 +10,7 @@ from django.template import add_to_builtins as register_templatetags
 from django.template import Template as DjangoTemplate
 from django.template import TemplateDoesNotExist
 from django.template import Context, RequestContext
 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:
 try:
        import json
 except ImportError:
@@ -99,12 +99,18 @@ class Entity(models.Model):
        
        class Meta:
                abstract = True
        
        class Meta:
                abstract = True
-
+       
 
 class Collection(models.Model):
        name = models.CharField(max_length=255)
        description = models.TextField(blank=True, null=True)
 
 class Collection(models.Model):
        name = models.CharField(max_length=255)
        description = models.TextField(blank=True, null=True)
-
+       
+       def get_count(self):
+               return self.members.count()
+       get_count.short_description = 'Members'
+       
+       def __unicode__(self):
+               return self.name
 
 class CollectionMemberManager(models.Manager):
        use_for_related_fields = True
 
 class CollectionMemberManager(models.Manager):
        use_for_related_fields = True
@@ -120,6 +126,9 @@ class CollectionMember(models.Model):
        member_content_type = models.ForeignKey(ContentType, verbose_name='Member type')
        member_object_id = models.PositiveIntegerField(verbose_name='Member ID')
        member = generic.GenericForeignKey('member_content_type', 'member_object_id')
        member_content_type = models.ForeignKey(ContentType, verbose_name='Member type')
        member_object_id = models.PositiveIntegerField(verbose_name='Member ID')
        member = generic.GenericForeignKey('member_content_type', 'member_object_id')
+       
+       def __unicode__(self):
+               return '%s - %s' % (self.collection, self.member)
 
 
 class TreeManager(models.Manager):
 
 
 class TreeManager(models.Manager):
@@ -157,6 +166,7 @@ class TreeManager(models.Manager):
                                return (obj, remainder)
                raise self.model.DoesNotExist('%s matching query does not exist.' % self.model._meta.object_name)
 
                                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)
 class TreeModel(models.Model):
        objects = TreeManager()
        parent = models.ForeignKey('self', related_name='children', null=True, blank=True)
@@ -166,7 +176,6 @@ class TreeModel(models.Model):
                path = getattr(self, field, '?')
                parent = self.parent
                while parent:
                path = getattr(self, field, '?')
                parent = self.parent
                while parent:
-                       self.validate_parent(parent)
                        path = getattr(parent, field, '?') + pathsep + path
                        parent = parent.parent
                return path
                        path = getattr(parent, field, '?') + pathsep + path
                        parent = parent.parent
                return path
@@ -177,30 +186,6 @@ class TreeModel(models.Model):
        
        class Meta:
                abstract = True
        
        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):
 
 
 class TreeEntity(TreeModel, Entity):
@@ -231,10 +216,6 @@ class InheritableTreeEntity(TreeEntity):
        @property
        def instance(self):
                return self.instance_type.get_object_for_this_type(id=self.id)
        @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, '?')
        
        def get_path(self, pathsep='/', field='slug'):
                path = getattr(self.instance, field, '?')
@@ -317,7 +298,7 @@ class File(Node):
 class Template(TreeModel):
        name = models.CharField(max_length=255)
        documentation = models.TextField(null=True, blank=True)
 class Template(TreeModel):
        name = models.CharField(max_length=255)
        documentation = models.TextField(null=True, blank=True)
-       mimetype = models.CharField(max_length=255, null=True, blank=True, help_text='Default: %s' % settings.DEFAULT_CONTENT_TYPE)
+       mimetype = models.CharField(max_length=255, null=True, blank=True, help_text='Default: %s' % settings.DEFAULT_CONTENT_TYPE, default=settings.DEFAULT_CONTENT_TYPE)
        code = models.TextField(verbose_name='django template code')
        
        @property
        code = models.TextField(verbose_name='django template code')
        
        @property
@@ -387,7 +368,7 @@ class Template(TreeModel):
 
 class Page(Node):
        """
 
 class Page(Node):
        """
-       Represents an HTML page. The page will have a number of related Contentlets depending on the template selected - but these will appear only after the page has been saved with that template.
+       Represents a page - something which is rendered according to a template. The page will have a number of related Contentlets depending on the template selected - but these will appear only after the page has been saved with that template.
        """
        template = models.ForeignKey(Template, related_name='pages')
        title = models.CharField(max_length=255)
        """
        template = models.ForeignKey(Template, related_name='pages')
        title = models.CharField(max_length=255)