Простейший способ сделать это:
Match.objects.filter(position__color='red', red_score__gt=F('blue_score'))
Возможно, вы захотите переместить модель Position
вниз, чтобы удалить апострофы из названий моделей, связанных с внешним ключом.
Это какочень хороший пример использования отношения ManyToMany:
class Team(models.Model):
name = models.CharField(max_length=100, default="", blank=True, null=True)
number = models.IntegerField()
class Match(models.Model):
type = models.CharField(max_length=3)
number = models.IntegerField()
red_score = models.IntegerField(default=0)
blue_score = models.IntegerField(default=0)
match_events = models.TextField(max_length=1000)
teams = models.ManyToManyField(Team, through='Position',
related_name='matches')
class Position(models.Model):
match = models.ForeignKey(Match)
color = models.CharField(max_length=5)
number = models.IntegerField()
team = models.ForeignKey(Team)
В этом случае вы получите еще несколько опций для упрощения доступа к данным, например: если team
ваша действительная команда и match
выбрано одиночное совпадениегде-то ранее в коде это действительно:
team.matches.filter(red_score__gt=F('blue_score')) # all won matches of this team
match.teams.all() # teams involved in this match