MCPcopy
hub / github.com/django/django / _get_next_or_previous_in_order

Method _get_next_or_previous_in_order

django/db/models/base.py:1364–1385  ·  view source on GitHub ↗
(self, is_next)

Source from the content-addressed store, hash-verified

1362 )
1363
1364 def _get_next_or_previous_in_order(self, is_next):
1365 cachename = "__%s_order_cache" % is_next
1366 if not hasattr(self, cachename):
1367 op = "gt" if is_next else "lt"
1368 order = "_order" if is_next else "-_order"
1369 order_field = self._meta.order_with_respect_to
1370 filter_args = order_field.get_filter_kwargs_for_object(self)
1371 obj = (
1372 self.__class__._default_manager.filter(**filter_args)
1373 .filter(
1374 **{
1375 "_order__%s"
1376 % op: self.__class__._default_manager.values("_order").filter(
1377 **{self._meta.pk.name: self.pk}
1378 )
1379 }
1380 )
1381 .order_by(order)[:1]
1382 .get()
1383 )
1384 setattr(self, cachename, obj)
1385 return getattr(self, cachename)
1386
1387 def _get_field_expression_map(self, meta, exclude=None):
1388 if exclude is None:

Callers

nothing calls this directly

Calls 5

order_byMethod · 0.80
getMethod · 0.45
filterMethod · 0.45
valuesMethod · 0.45

Tested by

no test coverage detected