当前位置:  开发笔记 > 后端 > 正文

django admin在内联中覆盖保存方法?

如何解决《djangoadmin在内联中覆盖保存方法?》经验,为你挑选了1个好方法。

有没有办法同时覆盖内联表单和父级的保存方法?

我想在用户保存编辑的内联表单时更改字段的值.

谢谢 :)



1> vdboor..:

若要自定义内联保存,可以覆盖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也许可以为您做类似的事情.

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有