Note that there are some explanatory texts on larger screens.

plurals
  1. POdjango - how to get a queryset based on a count of references to foreign field
    text
    copied!<p>Question about how to perform a django query. I have a Game model with a 'through' ManyToManyField to the User model.</p> <pre><code>class Game(models.Model): # other misc game-description fields... players = models.ManyToManyField(User, through='PlayerGameResult', blank=True, null=True) class PlayerGameResult(models.Model): game = models.ForeignKey(Game) player = models.ForeignKey(User) dtime_played = models.DateTimeField(default=datetime.now) # ... </code></pre> <p>If a particular game has been played by 1+ players, then the players field in the Game model will have 1+ references. Otherwise players is null. For the query question please refer to the ?????? below....</p> <pre><code># all games not yet played by this user... games_qset = Game.objects.exclude(players__username=request.user.username) # out of all the games not played by this user, extract the ones not # yet played by anyone else either (this user would be the 1st player) games_unplayed_qset = games_qset.filter(players__isnull=True) # here's the question: out of all the games that have not been played by # this user, get a queryset that extracts only the games that have been # played by more than 10 (GAME_WITH_FEW_PLAYERS_THRESHOLD) players # ?????? this is the query I don't know how to make... ????? # # in the following example, I want to get back a queryset that includes only # Game Ids 6 and 19, because they have players count 20 and 12 (&gt; threshold 10) # # (Pdb) for rec in games_qset: print rec # Game id 6, Num players: 20 # Game id 7, Num players: 5 # Game id 13, Num players: 0 # Game id 19, Num players: 12 # # for a count of all games that have been played by at least one player: # (Pdb) games_qset.filter(players__isnull=False).count() # 3 # </code></pre> <p>Any ideas? Thank you. Juan</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload