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

时间:2012-08-01 17:46:30

标签: python django admin models

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

2 个答案:

答案 0 :(得分:14)

请参阅:Actions that Provide Intermediate Pages

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

答案 1 :(得分: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

通过这些更改,您将拥有一个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]