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