2012-07-13 53 views
1

我怎么能说服一个Django 1.3基于类的通用视图:在MTM使用基于类的UpdateView中间人模型

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

不放弃那么容易出现错误:

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

即使中介模型中的所有字段都有默认值,我也无法获得基于类的通用视图来保存。基于功能的版本也看起来很混乱。 Django 1.3。

+0

注意我使用admin.TabularInlin在admin中进行编辑工作。 – Bryce 2012-07-13 09:04:41

回答

1

您应该延伸UpdateView并覆盖form_valid()方法手动保存中介模型。

就个人而言,我从不直接从URL模式使用通用视图,我总是在views.py逐字扩展它们。

+1

我是django的新手,你能更明确还是显示一个样本? – Bryce 2012-07-13 16:09:34

1

由于贝里斯拉夫LOPAC说:

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) 

我回答一些类似here