Skip to main content

Add manual sort order to Django objects via an abstract base class and admin classes.

Project description

# Django Orderable


Add manual sort order to Django objects via an abstract base class and admin classes. Project includes:

* Abstract base Model
* Admin class
* Inline admin class
* Admin templates


## Demo


![django-orderable demo](https://cloud.githubusercontent.com/assets/30606/6326221/667992e0-bb47-11e4-923e-29334573ff5c.gif)

## Installation


Grab from the PyPI:

pip install django-orderable


Add to your INSTALLED_APPS:

...
'orderable',
...

Subclass the Orderable class:

from orderable.models import Orderable


class Book(Orderable):
...

Subclass the appropriate Orderable admin classes:

from orderable.admin import OrderableAdmin, OrderableTabularInline


class SomeInlineClass(OrderableTabularInline):
...

class SomeAdminClass(OrderableAdmin):
list_display = ('__unicode__', 'sort_order_display')
...


jQuery and jQuery UI are used in the Admin for the draggable UI. You may override the versions with your own (rather than using Google's CDN):

class SomeAdminClass(OrderableAdmin):
class Media:
extend = False
js = (
'path/to/jquery.js',
'path/to/jquery.ui.js',
)


## Notes

### `class Meta`

If your subclass of `Orderable` defines [`class Meta`](https://docs.djangoproject.com/en/2.0/ref/models/options/) then make sure it subclasses `Orderable.Meta` one so the model is sorted by `sort_order`. ie:

class MyOrderable(Orderable):
class Meta(Orderable.Meta):
...

### Custom Managers

Similarly, if your model has a custom manager, subclass `orderable.managers.OrderableManager` instead of `django.db.models.Manager`.

### Transactions

Saving orderable models invokes a fair number of database queries, and in order
to avoid race conditions should be run in a transaction.

### Adding Orderable to Existing Models

You will need to populate the required `sort_order` field. Typically this is
done by adding the field in one migration with a default of `0`, then creating
a data migration to set the value to that of its primary key:


for obj in orm['appname.Model'].objects.all():
obj.sort_order = obj.pk
obj.save()


### Multiple Models using Orderable

When multiple models inherit from Orderable the `next()` and `previous()`
methods will look for the next/previous model with a sort order. However you'll
likely want to have the various sort orders determined by a foreign key or some
other predicate. The easiest way (currently) is to override the method in
question.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-orderable-6.0.1.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

django_orderable-6.0.1-py2.py3-none-any.whl (16.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-orderable-6.0.1.tar.gz.

File metadata

  • Download URL: django-orderable-6.0.1.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.6

File hashes

Hashes for django-orderable-6.0.1.tar.gz
Algorithm Hash digest
SHA256 1659ee05fac8b0b1e6f6703d037d1386bb78ee6482c1110b614ced4ecee6f0c3
MD5 89a3c3e954e2f38dcc89f966f7013a1a
BLAKE2b-256 3e9b9bc9f69d07cbff445ce881ec63cdb37605d83908bcf9382ecb043d4422a1

See more details on using hashes here.

File details

Details for the file django_orderable-6.0.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_orderable-6.0.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 50155acadb47d8e02ae23700c0eb1272480da1aa8b73f961c9be01e9d0592702
MD5 56d9c45387a8a1d98cc11e5f6ea76c5a
BLAKE2b-256 d1316ea32d70406683e6efdb29146a540aaf8e3a8653fc3429a649d3d5e07f21

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page