Django Tips & Tricks #6 - Make Deleting Easy In Admin
Lets say we have a model as shown in some project.
from django.db import models
class Resource(models.Model):
"""
Model to hold resources for books.
"""
book = models.ForeignKey('Book')
book_type = models.IntegerField()
url = models.URLField()
This model can be registered in admin as follows.
from django.contrib import admin
from . import models
class ResourceAdmin(admin.ModelAdmin):
list_display = ('book', 'book_type', 'url')
admin.site.register(models.Resource, ResourceAdmin)
This will generate a nice admin interface to modify the data.
Now if we want to delete a record, we need to follow these steps.
- First, we have to select that record
- Next, we have to click on the action dropdown
- Next, we have to select
delete
action - Next, we have to click
Go
button. - In the next page we have to confirm that we have to delete.
Just to delete a single record, we have to click 5 times. That's too many clicks for a single action.
To simplify the process, we can have simple
delete
button for the objects as shown. This can be achieved by writing a function which will insert delete button for every record.from django.contrib import admin
from . import models
class ResourceAdmin(admin.ModelAdmin):
def delete(self, obj):
return '<input type="button" value="Delete" onclick="location.href=\'%s/delete/\'" />'.format(obj.pk)
delete.allow_tags = True
delete.short_description = 'Delete object'
list_display = ('book', 'book_type', 'url', 'delete')
admin.site.register(models.Book)
Now we have an admin with delete button for the records.
To delete an object, just click on
delete
button and then confirm to delete it. Now, we are deleting objects with just 2 clicks.Need further help with this? Feel free to send a message.