Added Redirect unicode.
[philo.git] / models.py
index 9210e1b..4df28d3 100644 (file)
--- a/models.py
+++ b/models.py
@@ -19,6 +19,7 @@ from django.template.loader import get_template
 from django.http import Http404, HttpResponse, HttpResponseServerError, HttpResponseRedirect
 from django.core.servers.basehttp import FileWrapper
 from django.conf import settings
 from django.http import Http404, HttpResponse, HttpResponseServerError, HttpResponseRedirect
 from django.core.servers.basehttp import FileWrapper
 from django.conf import settings
+from philo.validators import URLRedirectValidator
 
 
 def register_value_model(model):
 
 
 def register_value_model(model):
@@ -96,19 +97,20 @@ 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)
        
+       @fattr(short_description='Members')
        def get_count(self):
                return self.members.count()
        def get_count(self):
                return self.members.count()
-       get_count.short_description = 'Members'
        
        def __unicode__(self):
                return self.name
 
        
        def __unicode__(self):
                return self.name
 
+
 class CollectionMemberManager(models.Manager):
        use_for_related_fields = True
 
 class CollectionMemberManager(models.Manager):
        use_for_related_fields = True
 
@@ -212,7 +214,10 @@ class InheritableTreeEntity(TreeEntity):
        
        @property
        def instance(self):
        
        @property
        def instance(self):
-               return self.instance_type.get_object_for_this_type(id=self.id)
+               try:
+                       return self.instance_type.get_object_for_this_type(id=self.id)
+               except:
+                       return None
        
        def get_path(self, pathsep='/', field='slug'):
                path = getattr(self.instance, field, '?')
        
        def get_path(self, pathsep='/', field='slug'):
                path = getattr(self.instance, field, '?')
@@ -246,7 +251,7 @@ class Node(InheritableTreeEntity):
                return HttpResponseServerError()
                
        class Meta:
                return HttpResponseServerError()
                
        class Meta:
-               unique_together=(('parent', 'slug',),)
+               unique_together = (('parent', 'slug'),)
 
 
 class MultiNode(Node):
 
 
 class MultiNode(Node):
@@ -271,13 +276,16 @@ class Redirect(Node):
                (302, 'Temporary'),
                (301, 'Permanent'),
        )
                (302, 'Temporary'),
                (301, 'Permanent'),
        )
-       target = models.URLField(help_text='Must be a valid, absolute URL (i.e. http://)')
+       target = models.CharField(max_length=200,validators=[URLRedirectValidator()])
        status_code = models.IntegerField(choices=STATUS_CODES, default=302, verbose_name='redirect type')
        
        def render_to_response(self, request, path=None, subpath=None):
                response = HttpResponseRedirect(self.target)
                response.status_code = self.status_code
                return response
        status_code = models.IntegerField(choices=STATUS_CODES, default=302, verbose_name='redirect type')
        
        def render_to_response(self, request, path=None, subpath=None):
                response = HttpResponseRedirect(self.target)
                response.status_code = self.status_code
                return response
+       
+       def __unicode__(self):
+               return self.slug
 
 
 class File(Node):
 
 
 class File(Node):
@@ -298,7 +306,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, default=settings.DEFAULT_CONTENT_TYPE)
+       mimetype = models.CharField(max_length=255, null=True, blank=True, help_text='Default: %s' % settings.DEFAULT_CONTENT_TYPE)
        code = models.TextField(verbose_name='django template code')
        
        @property
        code = models.TextField(verbose_name='django template code')
        
        @property
@@ -389,14 +397,20 @@ class Contentlet(models.Model):
        name = models.CharField(max_length=255)
        content = models.TextField()
        dynamic = models.BooleanField(default=False)
        name = models.CharField(max_length=255)
        content = models.TextField()
        dynamic = models.BooleanField(default=False)
+       
+       def __unicode__(self):
+               return self.name
 
 
 class ContentReference(models.Model):
        page = models.ForeignKey(Page, related_name='contentreferences')
        name = models.CharField(max_length=255)
        content_type = models.ForeignKey(ContentType, verbose_name='Content type')
 
 
 class ContentReference(models.Model):
        page = models.ForeignKey(Page, related_name='contentreferences')
        name = models.CharField(max_length=255)
        content_type = models.ForeignKey(ContentType, verbose_name='Content type')
-       content_id = models.PositiveIntegerField(verbose_name='Content ID')
+       content_id = models.PositiveIntegerField(verbose_name='Content ID', blank=True, null=True)
        content = generic.GenericForeignKey('content_type', 'content_id')
        content = generic.GenericForeignKey('content_type', 'content_id')
+       
+       def __unicode__(self):
+               return self.name
 
 
 register_templatetags('philo.templatetags.containers')
 
 
 register_templatetags('philo.templatetags.containers')