2
我有两个模型:League
和Team
。 Team
有一个到League
的外键链接。我希望能够根据存储在League
中的值为Team
设置可用选项。具体做法是:django模型表单,限制在ForeignKey模型中基于值的选择
class League(models.Model):
number_of_teams = models.IntegerField()
class Team(models.Model):
league = models.ForeignKey(League)
draft_slot = models.IntegerField(choices=[(i+1,i+1) for i in range(?????????)])
我承认我无法准确定义我draft_slot.choices
在Team
模型。所以,我希望建立Team
像这样:
class Team(models.Model):
league = models.ForeignKey(League)
draft_slot = models.IntegerField()
我已成立了一个ModelForm
Team
的:
class TeamModelForm(ModelForm):
class Meta:
model = Team
而且的Team
ModelForm
一个观点:
def SetupTeam(request, fanatic_slug=None, league_slug=None):
league = League.objects.get(slug=league_slug)
form = TeamModelForm()
return render_to_response('league/addteam.html', {
'form': form
}, context_instance = RequestContext(request))
什么foo我是否需要为了使用league.id
,league.number_of_teams
所以查看TeamModelForm
预填充team.league
和还呈现场代表team.draft_slot
看起来像
draft_slot = models.IntegerField(choices=[(i+1,i+1) for i in range(league.number_of_teams+1)])
我小心翼翼地通过代码加强。如果我设置n = self.instance.league.number团队数量,我会得到一个我可以迭代的数字。 self.fields。['draft_slot']。选项失败。我试图设置它等于1,到(1,1)到((1,1),)以及给定的代码。当查看TeamModelForm时,代码无法提供经典的下拉列表选项。其他一切看起来不错。 – Cole
@cole查看上面的精化代码。注意'self.fields ['draft_slot']。widget.choices',而不是'self.fields ['draft_slot']。choices'。告诉我它是否有效。 – rantanplan
你非常接近!它在我将以下行添加到类Meta后起作用:widgets = {'draft_position':Select(choices =())} – Cole