Bryce
Bryce

Reputation: 8702

Using class-based UpdateView on a m-t-m with an intermediary model

How can I convince a Django 1.3 class based generic view:

UpdateView.as_view(model=Category,
template_name='generic_form.html',
success_url='/category/')

To not give up so easy with error:

"Cannot set values on a ManyToManyField which specifies an intermediary model."

Even if all fields in the intermediary model have defaults, I can't get the class based generic view to save. The functional based version looks messy also. Django 1.3.

Upvotes: 1

Views: 1908

Answers (2)

ecdani
ecdani

Reputation: 355

As Berislav Lopac says:

class CategoryView(UpdateView):
    model=Category
    def form_valid(self, form):
        self.object = form.save(commit=False)
        IntermediateModel.objects.filter(category = self.object).delete()
        for other_side_model_object in form.cleaned_data['other_side_model_field']:
            intermediate_model = IntermediateModel()
            intermediate_model.category = self.object
            intermediate_model.other_side_model_related_field= other_side_model_object
            intermediate_model.save()
        return super(ModelFormMixin, self).form_valid(form)

I answer some similar here.

Upvotes: 2

Berislav Lopac
Berislav Lopac

Reputation: 17243

You should extend UpdateView and override the form_valid() method to manually save the intermediary model.

Personally, I never use generic views directly from the URL pattern, I always extend them verbatim in views.py.

Upvotes: 0

Related Questions