0

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

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

4

1 回答 1

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'))
于 2013-03-26T12:15:57.313 回答