Drag-and-drop ordering for objects and inlines in Django admin using django-suit.
pip install -e git://github.com/JP74/django-suit-sortable.git#egg=suit_sortable
- Add
suit_sortable
to yourINSTALLED_APPS
. - Ensure
django.core.context_processors.static
is in yourTEMPLATE_CONTEXT_PROCESSORS
.
To use suit_sortable you must do following:
In your models.py
file add integer property for sortable to you model:
from django.db import models
class Category(models.Model):
...
position = models.PositiveIntegerField()
If you're adding Sorting to an existing model, it is recommended that you use django-south to create a schema migration to add the "position" field to your model. You will also need to create a data migration in order to add the appropriate values for the position
column.
Example assuming a model named "Category":
def forwards(self, orm):
for index, category in enumerate(orm.Category.objects.all()):
category.position = index + 1
category.save()
To enable sorting in the admin, you need to inherit from SortableAdmin
and add a list_editable
column for the position
field:
from django.contrib import admin
from myapp.models import MySortableClass
from suit_sortable.admin import SortableAdmin
class MySortableAdminClass(SortableAdmin):
list_display = (..., 'position',)
list_editable = ('position',)
"""Any other admin options you need go here"""
admin.site.register(MySortableClass, MySortableAdminClass)
To enable sorting on TabularInline models, you need to inherit from SortableTabularInline:
from suit_sortable.admin import SortableTabularInline
class MySortableTabularInline(SortableTabularInline):
"""Your inline options go here"""
To enable sorting on StackedInline models, you need to inherit from SortableStackedInline:
from suit_sortable.admin import SortableStackedInline
class MySortableStackedInline(SortableStackedInline):
"""Your inline options go here"""
Since sortables are based on JavaScript solution, there are known limitations:
- It doesn't work with pagination.