我想自定义我的django管理员操作。我的目标是制作一个可以更新所选对象的动作,但不仅要更新一个模型或一个字段。所以我想我应该编写多个动作,尽管这些代码非常相似。我的问题是如何编写这些操作,考虑代码重用。
例如,函数update_module(modeladmin,request,queryset)实现如下操作,
def update_module(modeladmin, request, queryset):
...
form = module_form(request.POST)
if form.is_valid():
one = form.cleaned_data['module']
...
....
admin.site.add_action(update_module)
现在我需要编写另一个动作,如下所示,
def update_src(modeladmin, request, queryset):
...
form = src_form(request.POST)
if form.is_valid():
one = form.cleaned_data['src']
...
....
admin.site.add_action(update_src)
如我们所见,这两个动作非常相似。是否有一些方法可以重用更多代码。也许应该使用装饰师?
答案 0 :(得分:4)
我没有对此进行测试,但我认为它应该可行。
def update_func(model):
def update(modeladmin, request, queryset):
...
form = module_form(request.POST)
if form.is_valid():
one = form.cleaned_data[model]
...
...
return update
admin.site.add_action(update_func('module'))
admin.site.add_action(update_func('src'))