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() 

Popular posts from this blog

c# - ODP.NET Oracle.ManagedDataAccess causes ORA-12537 network session end of file -

matlab - Compression and Decompression of ECG Signal using HUFFMAN ALGORITHM -

utf 8 - split utf-8 string into bytes in python -