2012-05-20 1 views
1

je modèle:Filtre à ManyToManyField avec par

class Player(models.Model) : 
    ... 
    teams = models.ManyToManyField("Team", through="PlayerTeam") 

class Team(models.Model) : 
    ... 
    players = models.ManyToManyField("Player", through="PlayerTeam") 

class PlayerTeam(models.Model) : 
    player = models.ForeignKey(Player) 
    team = models.ForeignKey(Team) 
    date_begin = models.DateField() 
    date_end = models.DateField(blank=True, null=True) 

Je veux que tous les joueurs qui jouent dans l'équipe sélectionnée (DATE_END est nulle). J'ai essayé ceci:

team = get_object_or_404(Team, pk=id) 
players = team.players.filter(date_end__isnull=True) 

mais il ne fonctionne pas, parce que le champ 'DATE_END' est pas dans le modèle du joueur

Répondre

0

Utilisez ceci:

players = team.playerteam_set.filter(date_end__isnull=True).values_list('player', flat=True) 
+0

Il retourne la liste des id joueurs. Je veux obtenir une liste des joueurs objet – Heniek

+1

Avez-vous besoin d'appliquer plus de filtres de Queryset? Si non, utilisez simplement quelque chose '[tp.player pour tp dans team.playerteam_set.filter (date_end__isnull = True) .select_related()]'. – ilvar

+0

Je veux ajouter un ordre par un champ dans le modèle de joueur – Heniek

Questions connexes