您可以将参数添加到 Django 自定义管理操作吗?

Posted

技术标签:

【中文标题】您可以将参数添加到 Django 自定义管理操作吗?【英文标题】:Can you add parameters to Django custom admin actions? 【发布时间】:2012-07-30 16:07:04 【问题描述】:

例如(不是这种情况,只是为了说明)如果我想添加一个操作以将所选项目中的特定字段设置为 X。是否可以添加一个操作以允许输入 X 而不是硬编码?

【问题讨论】:

【参考方案1】:

见:Actions that Provide Intermediate Pages

您不能直接从更改列表页面执行此操作,但在中间页面上,您可以有一个允许用户输入值的表单,然后将该值用于操作。

【讨论】:

【参考方案2】:

使用 Django 1.5 是可能的,虽然它有点 hackish。我不确定其他较旧的 Django 版本是否可行。

您编写自己的 ModelAdmin 子类。 ModelAdmin 有一个名为action_form 的属性,它决定了更改列表页面上Go 按钮之前显示的表单。您可以编写自己的表单,并在您的 ModelAdmin 子类中将其设置为 action_form。

from django import forms
from django.contrib.admin.helpers import ActionForm
# ActionForm is the default form used by Django
# You can extend this class

class XForm(ActionForm):
    x_field = forms.CharField()
    

class YourModelAdmin(admin.ModelAdmin):
    action_form = XForm

通过这些更改,您将拥有一个CharField,您可以在其中为X 赋值。

并在您的操作函数中使用x_field

def set_x_on_objects(modeladmin, request, queryset):
    for obj in queryset:
        obj.something = request.POST['x_field']
    # do whatever else you want

class YourModelAdmin(admin.ModelAdmin):
    action_form = XForm
    actions = [set_x_on_objects]

【讨论】:

使用这个
 from django import forms 
应该使用
适用于 Django 2.2。谢谢:)

以上是关于您可以将参数添加到 Django 自定义管理操作吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试自定义 django-admin 命令

Django,在管理员中更多2个

如何在 Django 管理中的字段旁边添加自定义按钮?

如何将额外的参数传递给 django admin 自定义表单?

将自定义操作添加到 UserModel 的管理页面

Django 管理员定制