0

djangoの管理アクションをカスタマイズしたいのですが。私の目標は、選択したオブジェクトを更新できるアクションを作成することですが、更新するモデルまたはフィールドは1つだけではありません。したがって、これらのコードは非常に似ていますが、複数のアクションを作成する必要があると思います。私の質問は、コードの再利用を考慮して、これらのアクションをどのように作成するかです。

たとえば、関数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)

ご覧のとおり、2つのアクションは非常に似ています。より多くのコードを再利用する方法はありますか?たぶんデコレータを使用する必要がありますか?

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 に答える