Moved Tag, and the Titled abstract model, from penfield into philo proper. Added...
[philo.git] / models / base.py
index 291fe70..3482a1a 100644 (file)
@@ -7,6 +7,25 @@ from philo.utils import ContentTypeRegistryLimiter
 from UserDict import DictMixin
 
 
+class Tag(models.Model):
+       name = models.CharField(max_length=250)
+       slug = models.SlugField()
+       
+       def __unicode__(self):
+               return self.name
+
+
+class Titled(models.Model):
+       title = models.CharField(max_length=255)
+       slug = models.SlugField()
+       
+       def __unicode__(self):
+               return self.title
+       
+       class Meta:
+               abstract = True
+
+
 class Attribute(models.Model):
        entity_content_type = models.ForeignKey(ContentType, verbose_name='Entity type')
        entity_object_id = models.PositiveIntegerField(verbose_name='Entity ID')
@@ -64,17 +83,19 @@ class QuerySetMapper(object, DictMixin):
        def __init__(self, queryset, passthrough=None):
                self.queryset = queryset
                self.passthrough = passthrough
+       
        def __getitem__(self, key):
                try:
                        return self.queryset.get(key__exact=key).value
                except ObjectDoesNotExist:
-                       if self.passthrough:
+                       if self.passthrough is not None:
                                return self.passthrough.__getitem__(key)
                        raise KeyError
+       
        def keys(self):
                keys = set(self.queryset.values_list('key', flat=True).distinct())
-               if self.passthrough:
-                       keys += set(self.passthrough.keys())
+               if self.passthrough is not None:
+                       keys |= set(self.passthrough.keys())
                return list(keys)