Python django:用于内联管理保存的处理程序
当用户在我的django站点的模型页面上单击“保存”按钮时,我想对所有要更新的模型一次做一些事情。如果我重写Python django:用于内联管理保存的处理程序,python,django,django-admin,Python,Django,Django Admin,当用户在我的django站点的模型页面上单击“保存”按钮时,我想对所有要更新的模型一次做一些事情。如果我重写save\u model,则每个对象调用一次,但我希望在所有要更新的对象中调用一个函数。我重写了save\u formset,但它不起作用: class ShadingAdmin(admin.ModelAdmin): list_display = ('foo', 'bar', 'baz') list_editable = ('bar', 'baz') list_di
save\u model
,则每个对象调用一次,但我希望在所有要更新的对象中调用一个函数。我重写了save\u formset
,但它不起作用:
class ShadingAdmin(admin.ModelAdmin):
list_display = ('foo', 'bar', 'baz')
list_editable = ('bar', 'baz')
list_display_links = ('foo',)
def save_formset(self, request, form, formset, change):
print "FOO"
admin.site.register(Shading, ShadingAdmin)
“FOO”
从不打印
我使用的是Django 1.2。formset.save()来自表单集。您可以使用commit=False调用它,更改只会被验证,不会保存在数据库中
save_formset()仅由管理员调用(您可以在django的源代码中执行grep)。…但是,在一天结束时不一样吗?对于每个模型,afaik仍然有单独的insert/update调用。@equinoxel:如果您编写了一些自定义SQL,则不会这样做。。。我想触发它。。。我一次需要所有实例。你能在表单集中覆盖.save()吗?@equinoxel:表单集是什么?我只有
admin.ModelAdmin
的这个子类。我不太熟悉Django的方式。如果你问的是这样的话,我可以完全控制代码。我的错。我假设您的代码类似于“if formset是有效的:formset.save()”?或者您正在使用管理界面中的表单集?为什么当我单击管理页面上的保存时,没有调用ModelAdmin
的save\u formset()
?(不是针对特定对象的save
,而是针对内联对象的save
)我有点困惑。。你在使用管理员界面吗?是的。我的全部管理代码(在admin.py
中)都在问题中。从不调用save\u formset
函数。请注意,我正在内联编辑对象-编辑list\u editable
元组中的字段。我查看了代码,并在add\u view()和change\u view()上调用了save\u formset。但是,正如文档所说,只有在所有元素都有效的情况下才会调用它(例如,在798附近检查django/contrib/admin/options.py行)。据我所见,如果all_valid()失败,则不会引发异常。尝试在调试模式下运行它,并将断点放在all_valid()调用之前。我暗自怀疑至少有一件东西坏了。。