Django: ValueError on form submission
I am using CreateWithInlineView
and InlineFormset
from django-extra-views
to create a form. Let's call the main model Experiment
, each experiment has multiple dimensions, mostly the foreign key from Measurement
to Experiment
.
The dimension also has a foreign key for InstrumentationPoint
, and InstrumentationPoint
must be created before submitting the inline dimension form. So the input form is basically a set of Experiment model formulas and a measurement model model.
Here is a snippet from views.py
class MeasurementInline(InlineFormSet):
model = Measurement
form_class = MeasurementInlineForm
class ManualExperimentAddView(CreateWithInlinesView):
model = Experiment
form_class = ManualExperimentAddForm
inlines = [MeasurementInline]
form_title = "Add experiments"
form_id = "AddExperimentForm"
template_name = "manual_add_experiments.html"
def forms_valid(self, form,inlines):
obj = form.save(commit = False)
build = Build.objects.get(pk=self.request.GET['build'])
obj.build = build
for inline in inlines:
if isinstance(inline,MeasurementInline):
obj1 = inline.save(commit=False)
ip = inline.instance.instrumentation_point
obj1.instrumentation_point = InstrumentationPoint.objects.create(build=build, measured_node=ip)
obj1.save()
obj.save()
return super(ManualExperimentAddView, self).forms_valid(form,inlines)
and forms.py
class MeasurementInlineForm(ModelForm):
error_css_class = "error"
required_css_class = "required"
class Meta:
model = Measurement
exclude = []
instrumentation_point = forms.CharField()
class ManualExperimentAddForm(ModelForm):
error_css_class = "error"
required_css_class = "required"
class Meta:
model = Experiment
exclude = ['attachment', 'build']
date = forms.DateField(widget = DateInput())
def is_valid(self):
return True
When submitting the form, I get the following error stack trace:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/extra_views/advanced.py" in post
126. return super(BaseCreateWithInlinesView, self).post(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/extra_views/advanced.py" in post
103. if all_valid(inlines) and form_validated:
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in all_valid
439. if not formset.is_valid():
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in is_valid
304. self.errors
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in errors
278. self.full_clean()
File "/usr/local/lib/python2.7/dist-packages/django/forms/formsets.py" in full_clean
327. self._errors.append(form.errors)
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in errors
176. self.full_clean()
File "/usr/local/lib/python2.7/dist-packages/django/forms/forms.py" in full_clean
394. self._post_clean()
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in _post_clean
427. self.instance = construct_instance(self, self.instance, opts.fields, construct_instance_exclude)
File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py" in construct_instance
62. f.save_form_data(instance, cleaned_data[f.name])
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py" in save_form_data
874. setattr(instance, self.name, data)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py" in __set__
627. self.field.rel.to._meta.object_name,
Exception Type: ValueError at /new/add_experiments/
Exception Value: Cannot assign "u'xdec'": "Measurement.instrumentation_point" must be a "InstrumentationPoint" instance.
Any help would be appreciated.
source to share