2013-03-26 72 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

相關問題