Fix sorting for raw_id objects

- Added common function to get querystring filters
- Excluded querystring parameters used for raw_id fields
- Version bump to 2.1.13
- Updated readme
master
Brandon Taylor 2019-02-21 09:56:08 -05:00
parent 9b143ca58e
commit e2bee04990
6 changed files with 23 additions and 14 deletions

View File

@ -606,8 +606,8 @@ ordering on top of that just seemed a little much in my opinion.
### Status ### Status
django-admin-sortable is currently used in production. django-admin-sortable is currently used in production.
### What's new in 2.1.12? ### What's new in 2.1.13?
- Fixed multiple list filter issue that was causing incorrect sortable objects to be displayed - Fixed an issue when sorting was performed on an object referenced by a raw_id field
### Future ### Future
- Better template support for foreign keys that are self referential. If someone would like to take on rendering recursive sortables, that would be super. - Better template support for foreign keys that are self referential. If someone would like to take on rendering recursive sortables, that would be super.

View File

@ -745,10 +745,10 @@ Status
django-admin-sortable is currently used in production. django-admin-sortable is currently used in production.
Whats new in 2.1.12? Whats new in 2.1.13?
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~
- Fixed multiple list filter issue that was causing incorrect sortable objects to be displayed - Fixed an issue when sorting was performed on an object referenced by a raw_id field
Future Future
~~~~~~ ~~~~~~

View File

@ -1,4 +1,4 @@
VERSION = (2, 1, 12) VERSION = (2, 1, 13)
DEV_N = None DEV_N = None

View File

@ -34,6 +34,15 @@ class SortableAdminBase(object):
after_sorting_js_callback_name = None after_sorting_js_callback_name = None
def get_querystring_filters(self, request):
filters = {}
for k, v in request.GET.items():
if k not in ['_to_field', '_popup',]:
filters.update({ k: v })
return filters
def changelist_view(self, request, extra_context=None): def changelist_view(self, request, extra_context=None):
""" """
If the model that inherits Sortable has more than one object, If the model that inherits Sortable has more than one object,
@ -42,10 +51,7 @@ class SortableAdminBase(object):
""" """
# apply any filters via the querystring # apply any filters via the querystring
filters = {} filters = self.get_querystring_filters(request)
for k, v in request.GET.items():
filters.update({ k: v })
# Check if the filtered queryset contains more than 1 item # Check if the filtered queryset contains more than 1 item
# to enable sort link # to enable sort link
@ -131,7 +137,8 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
# get sort group index from querystring if present # get sort group index from querystring if present
sort_filter_index = request.GET.get('sort_filter') sort_filter_index = request.GET.get('sort_filter')
filters = {} # apply any filters via the querystring
filters = self.get_querystring_filters(request)
if sort_filter_index: if sort_filter_index:
try: try:
@ -139,10 +146,6 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
except (IndexError, ValueError): except (IndexError, ValueError):
pass pass
# apply any filters via the querystring
for k, v in request.GET.items():
filters.update({ k: v })
# Apply any sort filters to create a subset of sortable objects # Apply any sort filters to create a subset of sortable objects
return self.get_queryset(request).filter(**filters) return self.get_queryset(request).filter(**filters)

View File

@ -52,6 +52,12 @@ class WidgetAdmin(SortableAdmin):
admin.site.register(Widget, WidgetAdmin) admin.site.register(Widget, WidgetAdmin)
class CreditAdmin(SortableAdmin):
raw_id_fields = ('project',)
admin.site.register(Credit, CreditAdmin)
class CreditInline(SortableTabularInline): class CreditInline(SortableTabularInline):
model = Credit model = Credit
extra = 1 extra = 1