django-admin-sortable 1.5.2 introduced backward-incompatible changes for Django 1.4.x
## Installation
1. pip install django-admin-sortable
--or--
Download django-admin-sortable from [source](https://github.com/iambrandontaylor/django-admin-sortable/archive/master.zip)
1. Unzip the directory and cd into the uncompressed project directory
2. *Optional: Enable your virtualenv
3. Run `$ python setup.py install` or add `adminsortable` to your PYTHONPATH.
## Configuration
1. Add `adminsortable` to your `INSTALLED_APPS`.
2. Ensure `django.core.context_processors.static` is in your `TEMPLATE_CONTEXT_PROCESSORS`.
### Static Media
Preferred:
Use the [staticfiles app](https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/)
Alternate:
Copy the `adminsortable` folder from the `static` folder to the
location you serve static files from.
### Testing
Have a look at the included sample_project to see working examples.
The login credentials for admin are: admin/admin
When a model is sortable, a tool-area link will be added that says "Change Order".
Click this link, and you will be taken to the custom view where you can drag-and-drop
the records into order.
Inlines may be drag-and-dropped into any order directly from the change form.
## Usage
### Models
To add sorting to a model, your model needs to inherit from `Sortable` and
have an inner Meta class that inherits from `Sortable.Meta`
#models.py
from adminsortable.models import Sortable
class MySortableClass(Sortable):
class Meta(Sortable.Meta):
pass
title = models.CharField(max_length=50)
def __unicode__(self):
return self.title
It is also possible to order objects relative to another object that is a ForeignKey,
even if that model does not inherit from Sortable:
from adminsortable.fields import SortableForeignKey
#models.py
class Category(models.Model):
title = models.CharField(max_length=50)
...
class Project(Sortable):
class Meta(Sortable.Meta):
pass
category = SortableForeignKey(Category)
title = models.CharField(max_length=50)
def __unicode__(self):
return self.title
Sortable has one field: `order` and adds a default ordering value set to `order`.
### Adding Sortable to an existing model
If you're adding Sorting to an existing model, it is recommended that you use [django-south](http://south.areacode.com/) to create a schema migration to add the "order" field to your model. You will also need to create a data migration in order to add the appropriate values for the `order` column.
Example assuming a model named "Category":
def forwards(self, orm):
for index, category in enumerate(orm.Category.objects.all()):
category.order = index + 1
category.save()
See: [this link](http://south.readthedocs.org/en/latest/tutorial/part3.html) for more
information on Data Migrations.
### Django Admin Integration
To enable sorting in the admin, you need to inherit from `SortableAdmin`:
If you need to extend the inline change form templates, you'll need to select the right one, depending on your version of Django. For Django 1.5.x or below, you'll need to extend one of the following: