Skip to main content
https://travis-ci.org/andersinno/django-sorting-field.svg?branch=master https://codecov.io/gh/andersinno/django-sorting-field/branch/master/graph/badge.svg
  • This package implements a Django form field + widget for drag & drog sorting of items

  • Sorting any item with a field called id is supported

  • The drag and drop feature has been implemented with html5sortable.

Known limitations

  • Refreshing the items on the widget not (yet?) supported out of the box

  • No tests

Example of the widget

readme-media/example.gif

Usage

The sort order field should be implemented on the model containing the sorted objects. This allows ordering of different instances of the same item set differently.

Let’s say you have image CarouselPlugin, Carousel, and Picture models, and you wish to be able to sort the same Carousel instance differently on each CarouselPlugin.

You also have a CMSPlugin object for the carousel.

class Carousel(models.Model):
        pass


class Picture(models.Model):
        carousel = models.ForeignKey(Carousel, related_name="pictures")
        image = SomeImageField()
        name = models.CharField()


class CarouselPlugin(CMSPlugin):
        carousel = models.ForeignKey(Carousel, related_name="x")


class CMSCarouselPlugin(CMSPluginBase):
        model = CarouselPlugin

        def render(self, context, instance, placeholder):
                context.update({
                        "pictures": self.instance.carousel.pictures.all(),
                })
                return context

Achieving the wanted behavior can be done in the following steps:

Add a (nullable) TextField to the model containing the order information

class CarouselPlugin(CMSPlugin):
        carousel = models.ForeignKey(Carousel, related_name="x")
        carousel_order = models.TextField(null=True)

Add the SortingFormField to the CMS Plugin and populate it

from django_sorting_field.fields import SortingFormField

class CarouselPluginForm(forms.ModelForm):
        carousel_order = SortingFormField()

        def __init__(self, *args, **kwargs):
                super(CarouselPluginForm, self).__init__(*args, **kwargs)
                if self.instance.pk:
                        self.fields["carousel_order"].populate(
                                items=self.instance.carousel.pictures.all(),
                        )

class CMSCarouselPlugin(CMSPluginBase):
        model = CarouselPlugin
        form = CarouselPluginForm

        def render(self, context, instance, placeholder):
                context.update({
                        "pictures": self.instance.carousel.pictures.all(),
                })
                return context

Finally, sort the items passed to the context data

from django_sorting_field.utils import sort_by_order

        class CMSCarouselPlugin(CMSPluginBase):
        model = CarouselPlugin
        form = CarouselPluginForm

        def render(self, context, instance, placeholder):
                context.update({
                        "pictures": sort_by_order(
                                self.instance.carousel.pictures.all(),
                                self.instance.carousel_order
                        ),
                })
                return context

Metadata

Release files for django-sorting-field 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-sorting-field 1.0.2
File Size Uploaded
django-sorting-field-1.0.2.tar.gz 7.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-sorting-field 1.0.2
File Interpreter ABI Platform
django_sorting_field-1.0.2-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 18.3 kB

Release files / django-sorting-field-1.0.2.tar.gz

Download URL django-sorting-field-1.0.2.tar.gz
Size 7.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e791dd6cf1deab565888875a88f05384f42ac8dfcae92562da82582a0c7dfaf9
BLAKE2b-256 checksum
How to use checksums
5db112d7a469b47f03869de02ca0db8e17bf15ebf68e194438c6346b7a76f0ba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / django_sorting_field-1.0.2-py2.py3-none-any.whl

Download URL django_sorting_field-1.0.2-py2.py3-none-any.whl
Size 10.9 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
baf750e2fd7267c0326877bf2ca8bcb99392ba75a63dd6f3f4b4512695698337
BLAKE2b-256 checksum
How to use checksums
7195d2f693c891cad708defd8cfca7613d3e4dd099381ccdca7ce188b668f83b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

1.0.2 This release

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page