fix ordering in editor when there are new objects in the changeset
This commit is contained in:
parent
c98bd2404c
commit
2ec0f63894
1 changed files with 16 additions and 3 deletions
|
@ -895,6 +895,21 @@ class QuerySetWrapper(BaseQueryWrapper):
|
||||||
return (self._changeset.get_created_object(self._obj.model, pk, get_foreign_objects=get_foreign_objects)
|
return (self._changeset.get_created_object(self._obj.model, pk, get_foreign_objects=get_foreign_objects)
|
||||||
for pk in sorted(self._created_pks))
|
for pk in sorted(self._created_pks))
|
||||||
|
|
||||||
|
def _ordering_key_func(self, ordering):
|
||||||
|
def key_func(obj):
|
||||||
|
result = []
|
||||||
|
for field in ordering:
|
||||||
|
fact = -1 if field[0] == '-' else 1
|
||||||
|
field = field.lstrip('-')
|
||||||
|
val = getattr(obj, field.lstrip('-'))
|
||||||
|
if field in ('id', 'pk'):
|
||||||
|
if isinstance(field, int):
|
||||||
|
result.extend((1*fact, val*fact))
|
||||||
|
else:
|
||||||
|
result.extend((2*fact, int(val[1:])*fact))
|
||||||
|
else:
|
||||||
|
result.append(val * fact)
|
||||||
|
|
||||||
def _get_cached_result(self):
|
def _get_cached_result(self):
|
||||||
"""
|
"""
|
||||||
Get results, make sure prefetch is prefetching and so on.
|
Get results, make sure prefetch is prefetching and so on.
|
||||||
|
@ -912,9 +927,7 @@ class QuerySetWrapper(BaseQueryWrapper):
|
||||||
|
|
||||||
ordering = self._obj.query.order_by
|
ordering = self._obj.query.order_by
|
||||||
if ordering:
|
if ordering:
|
||||||
result = sorted(result, key=lambda obj: tuple(
|
result = sorted(result, key=self._ordering_key_func(ordering))
|
||||||
getattr(obj, field.lstrip('-'))*(-1 if field[0] == '-' else 1) for field in ordering
|
|
||||||
))
|
|
||||||
|
|
||||||
for extra in self._extra:
|
for extra in self._extra:
|
||||||
# implementing the extra() call for prefetch_related
|
# implementing the extra() call for prefetch_related
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue