【问题标题】:How to write two similar django admin actions如何编写两个类似的 django 管理操作
【发布时间】:2013-03-16 05:26:59
【问题描述】:

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

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

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    我没有对此进行测试,但我认为它应该可以工作。

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

    【讨论】:

    • 您可能会从 modeladmin 获得所有必要的每个模型参数,因此可能不需要关闭,您可以通过 modeladmin 参数获得所有内容。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2020-02-06
    • 2014-05-15
    • 2021-12-13
    • 2017-08-02
    • 1970-01-01
    相关资源
    最近更新 更多