有没有办法同时覆盖内联表单和父级的保存方法?
我想在用户保存编辑的内联表单时更改字段的值.
谢谢 :)
若要自定义内联保存,可以覆盖FormSet
class SomeInlineFormSet(BaseInlineFormSet): def save_new(self, form, commit=True): return super(SomeInlineFormSet, self).save_new(form, commit=commit) def save_existing(self, form, instance, commit=True): return form.save(commit=commit) class SomeInline(admin.StackedInline): formset = SomeInlineFormSet # ....
注意,save_new()
只使用表单来获取数据,它不会让ModelForm
提交数据.相反,它构建了模型本身.这允许它插入父关系,因为它们在表单中不存在.这就是为什么覆盖form.save()
不起作用的原因.
在泛型内联的情况下,form.save()
永远不会调用该方法,form.cleaned_data
而是使用该方法获取所有值,并Field.save_form_data()
用于在模型实例中存储值.
仅供参考,一些一般提示将这些事情弄清楚; 拥有一个IDE(或者可能是vim配置或Sublime设置)非常有价值,它允许非常容易地跳转到符号定义.上面的代码是通过跳转到内联/ formset代码,并看看发生了什么来计算出来的.在PyCharm的情况下,通过按住Command(或Ctrl)并单击符号来工作.如果您是vim用户,ctags
也许可以为您做类似的事情.