Initial flexible attributes commit. Removed Relationship model in favor of a flexible...
[philo.git] / forms.py
index 57e772d..0e034df 100644 (file)
--- a/forms.py
+++ b/forms.py
@@ -1,13 +1,13 @@
 from django import forms
 from django.contrib.admin.widgets import AdminTextareaWidget
 from django.core.exceptions import ValidationError, ObjectDoesNotExist
+from django.db.models import Q
 from django.forms.models import model_to_dict, fields_for_model, ModelFormMetaclass, ModelForm, BaseInlineFormSet
 from django.forms.formsets import TOTAL_FORM_COUNT
 from django.template import loader, loader_tags, TemplateDoesNotExist, Context, Template as DjangoTemplate
 from django.utils.datastructures import SortedDict
 from philo.admin.widgets import ModelLookupWidget
 from philo.models import Entity, Template, Contentlet, ContentReference
-from philo.models.fields import RelationshipField
 from philo.utils import fattr
 
 
@@ -95,37 +95,6 @@ class EntityForm(EntityFormBase): # Would inherit from ModelForm directly if it
                return instance
 
 
-def validate_template(template):
-       """
-       Makes sure that the template and all included or extended templates are valid.
-       """ 
-       for node in template.nodelist:
-               try:
-                       if isinstance(node, loader_tags.ExtendsNode):
-                               extended_template = node.get_parent(Context())
-                               validate_template(extended_template)
-                       elif isinstance(node, loader_tags.IncludeNode):
-                               included_template = loader.get_template(node.template_name.resolve(Context()))
-                               validate_template(extended_template)
-               except Exception, e:
-                       raise ValidationError("Template code invalid. Error was: %s: %s" % (e.__class__.__name__, e))
-
-
-class TemplateForm(ModelForm):
-       def clean_code(self):
-               code = self.cleaned_data['code']
-               try:
-                       t = DjangoTemplate(code)
-               except Exception, e:
-                       raise ValidationError("Template code invalid. Error was: %s: %s" % (e.__class__.__name__, e))
-
-               validate_template(t)
-               return code
-
-       class Meta:
-               model = Template
-
-
 class ContainerForm(ModelForm):
        def __init__(self, *args, **kwargs):
                super(ContainerForm, self).__init__(*args, **kwargs)
@@ -133,14 +102,14 @@ class ContainerForm(ModelForm):
 
 
 class ContentletForm(ContainerForm):
-       content = forms.CharField(required=False, widget=AdminTextareaWidget)
+       content = forms.CharField(required=False, widget=AdminTextareaWidget, label='Content')
        
        def should_delete(self):
                return not bool(self.cleaned_data['content'])
        
        class Meta:
                model = Contentlet
-               fields = ['name', 'content', 'dynamic']
+               fields = ['name', 'content']
 
 
 class ContentReferenceForm(ContainerForm):
@@ -162,8 +131,8 @@ class ContentReferenceForm(ContainerForm):
 
 class ContainerInlineFormSet(BaseInlineFormSet):
        def __init__(self, containers, data=None, files=None, instance=None, save_as_new=False, prefix=None, queryset=None):
-               # Unfortunately, I need to add some things to BaseInline between its __init__ and its super call, so
-               # a lot of this is repetition.
+               # Unfortunately, I need to add some things to BaseInline between its __init__ and its
+               # super call, so a lot of this is repetition.
                
                # Start cribbed from BaseInline
                from django.db.models.fields.related import RelatedObject
@@ -280,7 +249,12 @@ class ContentReferenceInlineFormSet(ContainerInlineFormSet):
                super(ContentReferenceInlineFormSet, self).__init__(containers, data, files, instance, save_as_new, prefix, queryset)
        
        def get_container_instances(self, containers, qs):
-               qs = qs.filter(name__in=[c[0] for c in containers])
+               filter = Q()
+               
+               for name, ct in containers:
+                       filter |= Q(name=name, content_type=ct)
+               
+               qs = qs.filter(filter)
                container_instances = []
                for container in qs:
                        container_instances.append(container)