尝试通过过滤外键进行查询
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
我有一个庞大的运动队列表,它们将各自的联赛作为外键(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