2013-03-26 63 views
0

我想自定义我的django管理操作。我的目标是制定一项可更新选定对象的操作,但不仅需要更新一个模型或一个字段。所以我想我应该写多个动作,尽管这些代码非常相似。我的问题是如何编写这些操作,考虑代码重用。如何编写两个类似的django管理操作

例如,函数update_module(的ModelAdmin,请求查询集)实现为以下行动,

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

我没有测试过这个,但我认为它应该可以工作。

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')) 
+0

这是可能的,你可以得到所有从的ModelAdmin必要的每个模型的参数,所以就可能没有必要作出关闭,你可以打通'modeladmin'说法应有尽有。 – che 2013-03-26 12:19:16

+0

感谢您的想法。它的作品〜 – yejinxin 2013-03-26 14:03:34

相关问题