获取多对多的对象列表

时间:2017-06-22 15:09:34

标签: django many-to-many django-signals

class Team(models.Model):
    team_name = models.CharField(max_length=50, null=False)

    def __str__(self):
        return self.team_name


class Tournament(models.Model):
    types = (
        ('Round', 'Round'),
        ('Knockout', 'Knockout'),
    )
    teams = models.ManyToManyField(Team, related_name='tournament_teams')
    tournament_name = models.CharField(max_length=50, null=False)
    tournament_type = models.CharField(choices=types, max_length=40, null=False)

    def __str__(self):
        return self.tournament_name


class MatchRound(models.Model):
    team_a_id = models.ForeignKey(Team, related_name="team_a")
    team_b_id = models.ForeignKey(Team)
    date = models.DateTimeField(null=True)
    team_a_score = models.IntegerField(null=True)
    team_b_score = models.IntegerField(null=True)
    tournament_id = models.ForeignKey(Tournament, on_delete=models.CASCADE, null=True)

    @receiver(post_save, sender=Tournament)
    def create_match_round(sender, **kwargs):
        type = kwargs.get('instance').tournament_type
        if type == 'Round' and kwargs.get('created', False):
            teams = kwargs.get('instance').teams.all()
            schedule = create_schedule(teams)
            for round in schedule:
                for match in round:
                    team_a_id = match[0]
                    team_b_id = match[1]
                    tournament_id = kwargs.get('instance')
                    game = MatchRound.objects.create(team_a_id=team_a_id, team_b_id=team_b_id,
                                                     tournament_id=tournament_id)

我正在尝试为锦标赛创建赛程。所以,我在MatchRound模型上设置了一个触发器,我试图在比赛创建时获得锦标赛的团队。但是,以下一行

teams = kwargs.get('instance').teams.all()

返回空查询集。我无法弄清楚问题。

0 个答案:

没有答案