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