【问题标题】:Trying to make query with filtering foreign key尝试使用过滤外键进行查询
【发布时间】:2021-06-30 05:06:12
【问题描述】:

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

在我的 Django 表单中,我试图仅使用 MLB 键过滤掉团队,但是当我使用 Objects.filter(league='MLB') 进行查询时,我收到一个错误,告诉我它需要 id 号.但是当我执行 Objects.filter(league=3) 时,我没有收到错误但查询集为空。

Objects.all() 返回所有联赛的所有球队。如果我运行一个 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

【问题讨论】:

  • 你也可以分享联赛模型吗?

标签: python django forms model


【解决方案1】:

野战联赛会有Fk id,你可以用这个过滤名字:

   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

【讨论】:

  • Np :) 如果您仍然没有得到正确的查询集,请告诉我!
  • 哈哈我不同意!每次遇到困难时,您总会学到新的东西 :) 我会编辑回复并为此添加文档链接
  • @RyanThomas 将此答案标记为已接受,如果它真的对您有用..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 2013-10-25
  • 2015-11-04
  • 2019-06-18
  • 2018-03-04
  • 2023-03-11
相关资源
最近更新 更多