python - Can this be reduced to a single query? -


i have model field position = positiveintegerfield(unique=true). given instance of model, want instance next highest position (subject filters). if instance 1 highest position, want wrap around 0 , return instance lowest position; if instance one, want return itself.

here's code:

count = player.objects.count() return player.objects.filter(game_id=self.game_id, is_alive=true).annotate(     relative_position=(f('position') - self.position - 1 + count) % count ).order_by('relative_position')[:1].get() 

(the reason + count because negative number modulo positive 1 negative in sql.)

this requires 2 database queries. suspect it's possible in 1 query, using annotate , count, haven't figured out how put such query together. can done, , if so, how?

not 1 query, beats 2 queries , annotations:

players = player.objects.filter(game_id=self.game_id, is_alive=true).order_by('position') try:     return players.filter(position__lt=self.position)[0] except indexerror:     return players.last()