2015-11-12 246 views
0

我想將名爲「---------」(BLANK_CHOICE_DASH)的默認選定操作更改爲另一個特定操作。有沒有更好的方式來實現這一點,而不是添加一些JavaScript代碼,將重載加載時間的行動?設置Django管理員默認操作

+0

[Django的選擇欄(默認值)的可能的複製(http://stackoverflow.com/questions/22257622/default-value-for-django-choice-field) – solarissmoke

+0

@solarissmoke:這是不一樣的。我希望它在*管理操作*中。 – d33tah

+0

相同的概念應該適用 - 你只需要覆蓋相應的管理表單? – solarissmoke

回答

0

我想你可以覆蓋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 
1

1.Override的get_action_choices()方法在ModelAdmin,清除默認空白選擇和重新排序列表。

class YourModelAdmin(ModelAdmin): 
    def get_action_choices(self, request): 
    choices = super(DocumentAdmin, 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,專業action.Override 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) 
相關問題