Simple orderable mixin to add drag-and-drop ordering support to the ModelAdmin listing view.
It attempts to provide the feature request in Wagtail project without modifying the project code as it seems not a high priority item for the project.
Install the package
pip install wagtail-orderable
In your settings file, add wagtailorderable to INSTALLED_APPS:
INSTALLED_APPS = [
# ...
'wagtailorderable',
# ...
]To apply the orderable feature, extend your model with Orderable.
from django.db import models
from wagtailorderable.models import Orderable
class YourModel(Orderable):
title = models.CharField(max_length=200)Of course you can apply it to Wagtail's Page model.
from wagtail.core import fields
from wagtail.core.models import Page
from wagtailorderable.models import Orderable
class YourModel(Page, Orderable):
description = fields.RichTextField(blank=True)Note that Orderable also exists in wagtail.core.models, DO NOT use that as the mixins require the model from the same package.
To apply the feature support in admin panel. In wagtail_hooks.py:
from wagtail.contrib.modeladmin.options import (
ModelAdmin, modeladmin_register)
from wagtailorderable.modeladmin.mixins import OrderableMixin
from .models import YourModel
class YourModelAdmin(OrderableMixin, ModelAdmin):
model = YourModel
ordering = ['sort_order']
modeladmin_register(YourModelAdmin)Finally, collect the corresponding static file by running
python manage.py collectstaticin your project.
- Provide Github Actions script to build and publish package in PyPI
- Add support for Wagtail 3.0 and drop support for all Wagtail versions before 2.15 (#32)
- Use
pkinstead ofidfor duplicate positions (#31) 1.0.3
- Fix
TypeErrorwhen creating the first Orderable object (#21)
- Fix
sort_orderduplication for items - Fix wrong
returnsyntax
get_list_displayhandles any iterable- Support for filters in ModelAdmin
- Style updated
Most of the contribution comes from this commit which attempts to integrate the solution in Wagtail project. Though it is not being used in Wagtail now it provides great skeleton for the feature which helps me created this mixin.
Thanks the contribution from Andy Babic.
Contirbution for this project are all welcome :)