这是一个可能之前被问过的基本问题,但在搜索了很长时间后,我找不到答案。我对Django的术语还不是很熟悉,所以我可能会搜索错误的短语。
问题:我目前有3种不同的型号:
League
Team (foreign key=League)
Match(foreign key=League)
我的目标是在Match
模型中添加一个选项列表,其中列出了与Match实例具有相同主键的所有团队。我不确定我是否以正确的方式攻击此问题 - documentation表示choice
应限制为静态值
稍后,我想在Match
课程中引用所选的团队。
以下是我到目前为止所写的模型。
class League(models.Model):
league_name = models.CharField(max_length=30)
max_teams = models.IntegerField()
def __unicode__(self):
return self.league_name
class Team(models.Model):
league = models.ForeignKey(League)
team_name = models.CharField(max_length=30)
def __unicode__(self):
return self.team_name
class Match(models.Model):
league = models.ForeignKey(League)
teams = {team.team_name: team for team in Team.objects.filter(pk=league)}
home_team = models.CharField(choices=teams)
执行python manage.py syncdb
时,我得到了很长的回溯,但它提出的代码是
teams = {team.team_name: team for team in Team.objects.filter(pk=league)}
回溯:
(...)
TypeError: int() argument must be a string or a number, not 'ForeignKey'
有人能指出我正确的方向吗?
答案 0 :(得分:1)
这不是什么选择 - 除了其他任何东西,这个定义是在类级别,并且在你实例化你希望使用的联盟的对象之前进行评估。
home_team
应该是团队的ForeignKey。限制团队选择到相关联盟的最佳方法是在表单中而不是在模型中进行。