尝试通过过滤外键进行查询

Trying to make query with filtering foreign key

我有一个庞大的运动队列表,它们将各自的联赛作为外键(NBA、NCAA、MLB、NFL)。

在我的 Django 表单中,我试图仅过滤掉具有 MLB 键的球队,但是当我使用 Objects.filter(league='MLB') 进行查询时,我收到一个错误提示我想要身份证号码。但是当我做 Objects.filter(league=3) 时,我没有收到错误,但是查询集是空的。

Objects.all() returns 所有联赛的所有球队。如果我 运行 一个 for 循环我可以打印出所有球队的联赛,我似乎无法通过它们进行搜索。

我不确定我做错了什么。感谢您的帮助。

    Models

    class TeamName(models.Model):
        name = models.CharField(max_length=100, null=False, blank=False)
        abbreviation = models.CharField(max_length=10, null=False, blank=False)
        league = models.ForeignKey(
           'League', null=False, blank=False, on_delete=models.CASCADE)

        def __str__(self):
            return self.name

    class League(models.Model):
    leagues = (
        ('MLB', ('MLB')),
        ('NBA', ('NBA')),
        ('NCAAB', ('NCAAB')),
        ('NFL', ('NFL')),
    )

    name = models.CharField(
        max_length=10, choices=leagues, null=False, blank=False)

    def __str__(self):
        return self.name

    Forms

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        seasons = Season.objects.filter(name='MLB2021')
        names = [(season.id, season.name) for season in seasons]
        self.fields['season'].choices = names

        team_names = TeamName.objects.filter(league='MLB')
        teams = [(team.id, team.name)for team in team_names]
        self.fields['name'].choices = teams

场地联盟会有Fk ids,你可以通过这个过滤名称:

   team_names = TeamName.objects.filter(league__name='MLB')
   teams = [(team.id, team.name)for team in team_names]
   self.fields['name'].choices = teams

编辑: 参考文档:Making queries- Django Doc