django-admin-wizard
django-admin-wizard is a Django app providing helpers for django admin actions
with intermediate forms.
Description
Do you know "delete selected" action in Django-admin? This package provides
helpers for creating such actions with intermediate forms in two lines of code.
Also, you may add a link from django admin change page to a custom form view to
perform some form-supplied action on single object.
Installation
pip install django-admin-wizard
Working example is in testproject.testapp
.
- Add application to installed apps in django settings:
INSTALLED_APPS.append('admin_wizard')
- And an action to your admin:
from django.contrib import admin
from admin_wizard.admin import UpdateAction
from testproject.testapp import forms, models
@admin.register(models.MyModel)
class MyModelAdmin(admin.ModelAdmin):
actions = [UpdateAction(form_class=forms.RenameForm)]
- Add custom view to your admin:
from django.contrib import admin
from django.urls import path
from admin_wizard.admin import UpdateDialog
from testproject.testapp import forms, models
@admin.register(models.MyModel)
class MyModelAdmin(admin.ModelAdmin):
def get_urls(self):
urls = [
path('<int:pk>/rename/',
UpdateDialog.as_view(model_admin=self,
model=models.MyModel,
form_class=forms.RenameForm),
name='rename')
]
return urls + super().get_urls()
- Add a link to custom dialog in admin change page:
from django.contrib import admin
from django.urls import reverse
from testproject.testapp import models
@admin.register(models.MyModel)
class MyModelAdmin(admin.ModelAdmin):
readonly_fields = ('update_obj_url',)
def update_obj_url(self, obj):
url = reverse('admin:rename', kwargs=dict(pk=obj.pk))
return f'<a href="{url}">Rename...</a>'
update_obj_url.short_description = 'rename'
Now you have "rename" action in changelist and "rename" link in change view.
Enjoy :)