【问题标题】:Setting Django admin default action设置 Django 管理员默认操作
【发布时间】:2015-11-12 06:57:39
【问题描述】:

我想将名为“------” (BLANK_CHOICE_DASH) 的默认选定操作更改为另一个特定操作。有没有比添加一些会在加载时覆盖操作的 javascript 代码更好的方法来实现这一点?

【问题讨论】:

  • @solarissmoke:不一样。我希望它在 管理操作中。
  • 同样的概念应该适用 - 您只需要覆盖相应的管理表单?

标签: django


【解决方案1】:

1.覆盖ModelAdmin中的get_action_choices()方法,清除默认空白选项并重新排列列表。

class YourModelAdmin(ModelAdmin):
    def get_action_choices(self, request):
    choices = super(YourModelAdmin, self).get_action_choices(request)
    # choices is a list, just change it.
    # the first is the BLANK_CHOICE_DASH
    choices.pop(0)
    # do something to change the list order
    # the first one in list will be default option
    choices.reverse()
    return choices

2.具体操作。覆盖ModelAdmin.changelist_view,使用extra_context更新action_form

ChoiceField.initial 用于设置默认选择的选项。 所以如果你的动作名称是“print_it”,你可以这样做。

class YourModelAdmin(ModelAdmin):
    def changelist_view(self,request, **kwargs):
        choices = self.get_action_choices(request)
        choices.pop(0)  # clear default_choices
        action_form = self.action_form(auto_id=None)
        action_form.fields['action'].choices = choices
        action_form.fields['action'].initial = 'print_it'
        extra_context = {'action_form': action_form}
        return super(DocumentAdmin, self).changelist_view(request, extra_context)

【讨论】:

  • choices = super(DocumentAdmin, self).get_action_choices(request)
    应该是
    choices = super(MyModelAdmin, self).get_action_choices(request)
  • @NilsZenker 好的。修复它
【解决方案2】:

我认为您可以覆盖ModelAdmin 中的get_action_choices() 方法。

class MyModelAdmin(admin.ModelAdmin):
    def get_action_choices(self, request, default_choices=BLANK_CHOICE_DASH):
        """
        Return a list of choices for use in a form object.  Each choice is a
        tuple (name, description).
        """
        choices = [] + default_choices
        for func, name, description in six.itervalues(self.get_actions(request)):
            choice = (name, description % model_format_dict(self.opts))
            choices.append(choice)
        return choices

【讨论】:

    【解决方案3】:

    在您的 admin.py 文件中

    class MyModelAdmin(admin.ModelAdmin):
        def get_action_choices(self, request, **kwargs):
            choices = super(MyModelAdmin, self).get_action_choices(request)
            # choices is a list, just change it.
            # the first is the BLANK_CHOICE_DASH
            choices.pop(0)
            # do something to change the list order
            # the first one in list will be default option
            choices.reverse()
            return choices
    

    在你的班级里

    class TestCaseAdmin(MyModelAdmin):
    

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 2012-04-21
      • 2011-03-05
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      相关资源
      最近更新 更多