基于二阶场的Django反向外键

时间:2017-04-20 09:38:00

标签: python sql django foreign-keys

我在Django中有以下两个表。

class TeamSubscriptions(models.Model):
    user = models.ForeignKey(User, unique=True)
    soccer_team = models.ForeignKey(SoccerTeam)
    ....
    ....

    class Meta:
        db_table = 'soccer_team_subscriptions'

class MatchSubscriptions(models.Model):
    team_subscriber = models.ForeignKey(TeamSubscriptions, related_name='soccer_user_matches')
    soccer_match = models.IntegerField(db_index=True)
    winning_team_guess = models.CharField(max_length=50, default='')
    ...
    ...

    class Meta:
        db_table = 'soccer_game_subscriptions'
        unique_together = ("team_subscriber", "soccer_match")

我想从Teamsubscriptions获取所有订阅者。对于他们所有人,我想找到相应的 来自MatchSubscriptions的具有特定soccer_match ID的行。目的是从第二个表中获取winning_team_guess个特定soccer_match ID。

有没有办法为特定的soccer_match ID执行此操作(Reverse ForeignKey).. ??

1 个答案:

答案 0 :(得分:0)

是的,你可以用Django的ORM做到这一点:

TeamSubscriptions.objects.filter(matchsubscriptions__soccer_match_id=YOUR_ID)

查看Django documentation关于查找关系的信息。

一般情况下,如果您要在查询集中进行过滤,则可以使用related query name,默认情况下等于FK的related name,在您的示例中为matchsubscriptions_set,必须删除Django在使用查询集时生成的_set