mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #13296 -- Fixed ordering by Options.order_with_respect_to after deleting objects.
Thanks Simon Meers for the original patch.
This commit is contained in:
committed by
Mariusz Felisiak
parent
d9881a025c
commit
f97bbad908
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user