【发布时间】:2012-07-30 16:07:04
【问题描述】:
例如(不是这种情况,只是为了说明)如果我想添加一个操作以将所选项目中的特定字段设置为 X。是否可以添加一个操作以允许输入 X 而不是硬编码?
【问题讨论】:
标签: python django admin models
例如(不是这种情况,只是为了说明)如果我想添加一个操作以将所选项目中的特定字段设置为 X。是否可以添加一个操作以允许输入 X 而不是硬编码?
【问题讨论】:
标签: python django admin models
见:Actions that Provide Intermediate Pages
您不能直接从更改列表页面执行此操作,但在中间页面上,您可以有一个允许用户输入值的表单,然后将该值用于操作。
【讨论】:
使用 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应该使用