I'm a bit stumped on this. Given an arbitrary ordering as specified by
the ordering meta option:
https://docs.djangoproject.com/en/2.0/ref/models/options/#ordering
for example:
class Thing(models.Model):
field1 = ...
field2 = ...
field2 = ...
class Meta:
ordering = ['field1', '-field2', 'field3']
given an instant of Thing:
thing = Thing.objects.get(pk=...)
how can I get the next Thing after that one, and/or the prior Thing
before that one as they appear on the sorted list of Things.
It's got me stumped as I can't think of an easy way to build a filter
even with Q object for an arbitrary ordering given there can be multiple
fields in ordering and multiple Things can have the same ordering list
(i.e. there can be ties - that Django must resolve either arbitrarily or
with an implicit pk tie breaker on ordering).
It's got me stumped. I can solve any number of simpler problems just not
his generic one (yet).
Ideally I'd not build a list of all objects (waste of memory with large
collections), and look for my thing in the list and then pick out the
next or prior.
I'd ideally like to fetch it in one query returning the one Thing, or if
not possible no worse than returning all Things on side of it and
picking off the first or last respectively (even that's kludgy IMHO).
I'm using postgresql and I found a related question here:
https://dba.stackexchange.com/questions/53862/select-next-and-previous-rows
but would rather stick with the ORM and not even explore SQL (just took
a peak to see SQL can be constructed to do it I guess, as if not, the
ORM sure won't have a good way of doing it methinks).
I'd have thought this a sufficiently common use case but am perhaps
wrong there, with most sites exploiting simple orderings (like date_time
or creation say). But I want to build a generic solution that works on
any model I write, so I can walk through the objects in the order
specified by ordering, without building a list of all of them. In short
I want to solve this problem, not reframe the problem or work around it ;-).
Regards,
Bernd.
--
You received this message because you are subscribed to the Google Groups "Django
users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/751c367c-d5e9-e06b-8f5c-82054f11a9ab%40gmail.com.
For more options, visit https://groups.google.com/d/optout.