Использование основанного на классах UpdateView на m-t-m с промежуточной моделью

Как я могу убедить общий вид на основе класса Django 1.3:

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

Чтобы не сдаваться так легко с ошибкой:

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

Даже если все поля в промежуточной модели имеют значения по умолчанию, я не могу сохранить общее представление на основе классов. Функциональная версия тоже выглядит неряшливо. Джанго 1.3.


person Bryce    schedule 13.07.2012    source источник
comment
Примечание. Я использовал admin.TabularInlin, чтобы редактирование работало в админке.   -  person Bryce    schedule 13.07.2012


Ответы (2)


Вы должны расширить UpdateView и переопределить метод form_valid(), чтобы вручную сохранить промежуточную модель.

Лично я никогда не использую общие представления непосредственно из шаблона URL, я всегда расширяю их дословно в views.py.

person Berislav Lopac    schedule 13.07.2012
comment
Я новичок в django, не могли бы вы быть более точным или показать образец? - person Bryce; 13.07.2012

Как говорит Берислав Лопач:

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)

Я отвечаю на некоторые подобные здесь.

person ecdani    schedule 01.04.2013