Can you add parameters to Django custom admin actions?

前端 未结 2 1737
春和景丽
春和景丽 2021-02-05 08:43

For example (not the case, but just to illustrate) if I wanted to add an action to set a specific field in the selected items to X. Is it possible to add an action to allow X to

相关标签:
2条回答
  • 2021-02-05 09:06

    See: Actions that Provide Intermediate Pages

    You can't do it right from the changelist page, but on your intermediate page, you could have a form that would allow the user to enter a value, and then use that value for the action.

    0 讨论(0)
  • 2021-02-05 09:19

    It is possible with Django 1.5, though its a little hackish. I am not sure with what other older Django versions it's possible.

    You write your own ModelAdmin subclass. ModelAdmin has an attribute called action_form which determines the form shown before Go button on changelist page. You can write your own form, and set it as action_form on your ModelAdmin subclass.

    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
    

    With these changes, you will have a CharField, where you can put value for X.

    And use x_field in your action function.

    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]
    
    0 讨论(0)
提交回复
热议问题