你能为Django自定义管理操作添加参数吗?

nic*_*ine 17 python django admin models

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

Chr*_*att 14

请参阅:提供中间页面的操作

您无法从更改列表页面直接执行此操作,但在中间页面上,您可以使用允许用户输入值的表单,然后将该值用于操作.


Aks*_*aaj 5

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

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

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
Run Code Online (Sandbox Code Playgroud)

通过这些更改,您将拥有一个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]
Run Code Online (Sandbox Code Playgroud)