您可以将参数添加到 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 自定义管理操作吗?的主要内容,如果未能解决你的问题,请参考以下文章