(self, field, is_next, **kwargs)
| 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 |
nothing calls this directly
no test coverage detected