Reputation: 67
I have two models with ManyToMany relation. Here is the code:
class Player(models.Model):
SEX_CHOICES = (
('f', 'Female'),
('m', 'Male'),
)
tournaments = models.ManyToManyField('Tournament', through = "PlayerTournament",verbose_name = u"Tournament's players")
first_name = models.CharField(max_length = 30, verbose_name = u"First name")
last_name = models.CharField(max_length = 50, verbose_name = u"Last name")
sex = models.CharField(max_length = 1, choices = SEX_CHOICES, default = 'f', verbose_name = u"Sex")
elo = models.IntegerField(verbose_name = u"ELO")
class Meta:
ordering = ['elo']
def __unicode__(self):
return "%s - %s" % (self.last_name, self.first_name)
class Tournament(models.Model):
title = models.CharField(max_length = 100, verbose_name = u"Tournament's title")
players = models.ManyToManyField('Player', through = "PlayerTournament",verbose_name = u"Tournament's players")
beginning_date = models.DateTimeField(verbose_name = u"Tournament's beginning", null=True, blank = True)
def __unicode__(self):
return self.title
class PlayerTournament(models.Model):
player = models.ForeignKey(Tournament)
tournament = models.ForeignKey(Player)
class Meta:
db_table ='game_player_tournaments'
auto_created = Player
I'm trying to make a query to fetch related fields
PlayerTournament.objects.filter(tournament__title = "Winter").values()
But it doesn't work
FieldError: Cannot resolve keyword 'title' into field. Choices are: elo, first, first_name, id, last_name, playertournament, second, sex, statistics, tournament, tournaments
What am I doing wrong?
Upvotes: 3
Views: 105
Reputation: 99620
Looking at your models:
class PlayerTournament(models.Model):
player = models.ForeignKey(Tournament)
tournament = models.ForeignKey(Player)
You have player
and tournament
interchanged
You should be doing:
PlayerTournament.objects.filter(player__title = "Winter").values()
and if you are indeed looking for related fields, you should be using select_related
or prefetch_related
instead of values
(Which I highly doubt based on your quqery)
Upvotes: 5