如何写两个类似的django管理员动作

时间:2013-03-26 12:07:23

标签: python django django-admin

我想自定义我的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)

如我们所见,这两个动作非常相似。是否有一些方法可以重用更多代码。也许应该使用装饰师?

1 个答案:

答案 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'))