from django import forms
from django.contrib.admin.widgets import AdminTextareaWidget
+from django.contrib.contenttypes.generic import BaseGenericInlineFormSet
+from django.contrib.contenttypes.models import ContentType
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
ignored = []
opts = entity_model._entity_meta
for f in opts.proxy_fields:
+ if not f.editable:
+ continue
if fields and not f.name in fields:
continue
if exclude and f.name in exclude:
instance = super(EntityForm, self).save(commit=False)
for f in instance._entity_meta.proxy_fields:
+ if not f.editable or not f.name in cleaned_data:
+ continue
if self._meta.fields and f.name not in self._meta.fields:
continue
+ if self._meta.exclude and f.name in self._meta.exclude:
+ continue
setattr(instance, f.attname, cleaned_data[f.name])
if commit:
model = Attribute
+class AttributeInlineFormSet(BaseGenericInlineFormSet):
+ "Necessary to force the GenericInlineFormset to use the form's save method for new objects."
+ def save_new(self, form, commit):
+ setattr(form.instance, self.ct_field.get_attname(), ContentType.objects.get_for_model(self.instance).pk)
+ setattr(form.instance, self.ct_fk_field.get_attname(), self.instance.pk)
+ return form.save()
+
+
class ContainerForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ContainerForm, self).__init__(*args, **kwargs)