MCPcopy
hub / github.com/django/django / _get_next_or_previous_by_FIELD

Method _get_next_or_previous_by_FIELD

django/db/models/base.py:1343–1362  ·  view source on GitHub ↗
(self, field, is_next, **kwargs)

Source from the content-addressed store, hash-verified

1341 )
1342
1343 def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
1344 if not self._is_pk_set():
1345 raise ValueError("get_next/get_previous cannot be used on unsaved objects.")
1346 op = "gt" if is_next else "lt"
1347 order = "" if is_next else "-"
1348 param = getattr(self, field.attname)
1349 q = Q.create([(field.name, param), (f"pk__{op}", self.pk)], connector=Q.AND)
1350 q = Q.create([q, (f"{field.name}__{op}", param)], connector=Q.OR)
1351 qs = (
1352 self.__class__._default_manager.using(self._state.db)
1353 .filter(**kwargs)
1354 .filter(q)
1355 .order_by("%s%s" % (order, field.name), "%spk" % order)
1356 )
1357 try:
1358 return qs[0]
1359 except IndexError:
1360 raise self.DoesNotExist(
1361 "%s matching query does not exist." % self.__class__._meta.object_name
1362 )
1363
1364 def _get_next_or_previous_in_order(self, is_next):
1365 cachename = "__%s_order_cache" % is_next

Callers

nothing calls this directly

Calls 5

_is_pk_setMethod · 0.95
order_byMethod · 0.80
createMethod · 0.45
filterMethod · 0.45
usingMethod · 0.45

Tested by

no test coverage detected