X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/2af3cb7d8e4986e326c3b91233bc0aaa9c7d7c58..74ceac458ad030558f2e564ba34191115d0aadc5:/forms.py?ds=inline diff --git a/forms.py b/forms.py index 57e772d..0e034df 100644 --- 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)