3

I'm using CreateWithInlineView and InlineFormset from django-extra-views to create a form. Let's call the main model Experiment, Each Experiment has multiple Measurements which is basically a foreign key from Measurement to Experiment.

Measurement also has a foreign key to InstrumentationPoint and the InstrumentationPoint needs to be created before submitting the measurement inline form. So, the input form is basically a formset of Experiment modelform and Measurement modelform.

Here's 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

Upon form submission, 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.

1 Answer 1

1

in forms.py instrumentation_point field should be a InstrumentationPoint choice

instrumentation_point = forms.ModelChoiceField(
                                  queryset=InstrumentationPoint.objects.all()
                                              )
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.