diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-08-30 10:28:18 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-09-23 11:45:33 +0200 |
| commit | 2362f2726558dd0cc6e447878545dd3ddbd9b633 (patch) | |
| tree | 92bf0ca38ac697c895af7405e0c8b15374187e87 /django/db/models/base.py | |
| parent | 368832e80308c15df7082ea4c42a2381529b4471 (diff) | |
[3.0.x] Fixed #13296 -- Fixed ordering by Options.order_with_respect_to after deleting objects.
Thanks Simon Meers for the original patch.
Backport of f97bbad908df128189eff77d98af9a25ed1ecf23 from master
Diffstat (limited to 'django/db/models/base.py')
| -rw-r--r-- | django/db/models/base.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py index 4f3145ebc2..3ce711f3f1 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -15,13 +15,16 @@ from django.db import ( DEFAULT_DB_ALIAS, DJANGO_VERSION_PICKLE_KEY, DatabaseError, connection, connections, router, transaction, ) -from django.db.models import NOT_PROVIDED +from django.db.models import ( + NOT_PROVIDED, ExpressionWrapper, IntegerField, Max, Value, +) from django.db.models.constants import LOOKUP_SEP from django.db.models.constraints import CheckConstraint, UniqueConstraint from django.db.models.deletion import CASCADE, Collector from django.db.models.fields.related import ( ForeignObjectRel, OneToOneField, lazy_related_operation, resolve_relation, ) +from django.db.models.functions import Coalesce from django.db.models.manager import Manager from django.db.models.options import Options from django.db.models.query import Q @@ -869,9 +872,12 @@ class Model(metaclass=ModelBase): # autopopulate the _order field field = meta.order_with_respect_to filter_args = field.get_filter_kwargs_for_object(self) - order_value = cls._base_manager.using(using).filter(**filter_args).count() - self._order = order_value - + self._order = cls._base_manager.using(using).filter(**filter_args).aggregate( + _order__max=Coalesce( + ExpressionWrapper(Max('_order') + Value(1), output_field=IntegerField()), + Value(0), + ), + )['_order__max'] fields = meta.local_concrete_fields if not pk_set: fields = [f for f in fields if f is not meta.auto_field] |
