Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django:用于内联管理保存的处理程序_Python_Django_Django Admin - Fatal编程技术网

Python 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

当用户在我的django站点的模型页面上单击“保存”按钮时,我想对所有要更新的模型一次做一些事情。如果我重写
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()调用之前。我暗自怀疑至少有一件东西坏了。。