【问题标题】:Can you add parameters to Django custom admin actions?您可以将参数添加到 Django 自定义管理操作吗?
【发布时间】:2012-07-30 16:07:04
【问题描述】:

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

【问题讨论】:

    标签: python django admin models


    【解决方案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。谢谢:)
      猜你喜欢
      • 2013-01-26
      • 1970-01-01
      • 2022-01-24
      • 2021-01-30
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多