Skip to content

Commit 59ab2ad

Browse files
committed
[fix] Fixed re-ordering templates on device add page #434
Closes #434
1 parent 226442c commit 59ab2ad

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

openwisp_controller/config/sortedm2m/fields.py

+11
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
create_sorted_many_related_manager as base_create_sorted_many_related_manager,
1515
)
1616

17+
from .forms import SortedMultipleChoiceField
18+
1719

1820
def create_sorted_many_related_manager(superclass, rel, *args, **kwargs):
1921
BaseSortedRelatedManager = base_create_sorted_many_related_manager(
@@ -64,3 +66,12 @@ class SortedManyToManyField(BaseSortedManyToManyField):
6466
def contribute_to_class(self, cls, name, **kwargs):
6567
super().contribute_to_class(cls, name, **kwargs)
6668
setattr(cls, self.name, SortedManyToManyDescriptor(self))
69+
70+
def formfield(self, **kwargs):
71+
# TODO: Remove this when stacked inline admin is fixed in django-sortedm2m
72+
# https://github.com/jazzband/django-sortedm2m/pull/213
73+
defaults = {}
74+
if self.sorted:
75+
defaults['form_class'] = SortedMultipleChoiceField
76+
defaults.update(kwargs)
77+
return super().formfield(**defaults)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from sortedm2m.forms import (
2+
SortedCheckboxSelectMultiple as BaseSortedCheckboxSelectMultiple,
3+
)
4+
from sortedm2m.forms import SortedMultipleChoiceField as BaseSortedMultipleChoiceField
5+
6+
7+
class SortedCheckboxSelectMultiple(BaseSortedCheckboxSelectMultiple):
8+
class Media(BaseSortedCheckboxSelectMultiple.Media):
9+
# The django-sortedm2m library has a bug when the widget is
10+
# use in StackedInline Admin, see
11+
# https://github.com/jazzband/django-sortedm2m/pull/213
12+
# The workaround in sortedm2m/patch_sortedm2m.js fixes the bug.
13+
# TODO: Remove this workaround when a new version of django-sortedm2m
14+
# is released.
15+
js = (
16+
'admin/js/jquery.init.js',
17+
'sortedm2m/widget.js',
18+
'sortedm2m/jquery-ui.js',
19+
'sortedm2m/patch_sortedm2m.js',
20+
)
21+
22+
23+
class SortedMultipleChoiceField(BaseSortedMultipleChoiceField):
24+
widget = SortedCheckboxSelectMultiple
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
'use strict';
2+
(function ($) {
3+
$(document).ready( function () {
4+
$('.sortedm2m-items').sortable('destroy');
5+
})
6+
}(django.jQuery));

0 commit comments

Comments
 (0)