X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/8c6ffb8e54f201a0fb7776fdd865bbbb3d42a29b..d7d4d16a3aaf6d572e86c78b45d93b8bb065d23d:/forms.py diff --git a/forms.py b/forms.py index ced29b2..c864f31 100644 --- a/forms.py +++ b/forms.py @@ -7,8 +7,7 @@ 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.models import Entity, Template, Contentlet, ContentReference, Attribute from philo.utils import fattr @@ -96,6 +95,35 @@ class EntityForm(EntityFormBase): # Would inherit from ModelForm directly if it return instance +class AttributeForm(ModelForm): + def __init__(self, *args, **kwargs): + super(AttributeForm, self).__init__(*args, **kwargs) + if self.instance.value is not None: + value_field = self.instance.value.value_formfield() + if value_field: + self.fields['value'] = value_field + if hasattr(self.instance.value, 'content_type'): + self.fields['content_type'] = self.instance.value._meta.get_field('content_type').formfield(initial=getattr(self.instance.value.content_type, 'pk', None)) + + def save(self, *args, **kwargs): + instance = super(AttributeForm, self).save(*args, **kwargs) + + if self.cleaned_data['value_content_type'] != self.instance.value_content_type: + if self.instance.value is not None: + self.instance.value.delete() + del(self.cleaned_data['value']) + elif 'content_type' in self.cleaned_data and self.cleaned_data['content_type'] != self.instance.value.content_type: + self.instance.value.content_type = self.cleaned_data['content_type'] + self.instance.value.save() + elif 'value' in self.cleaned_data: + self.instance.set_value(self.cleaned_data['value']) + + return instance + + class Meta: + model = Attribute + + class ContainerForm(ModelForm): def __init__(self, *args, **kwargs): super(ContainerForm, self).__init__(*args, **kwargs)