типовой бланк Джанго, ограничить выбор, основываясь на стоимости в отношения foreignkey модель
У меня есть две модели: League
и Team
. Team
имеет внешнюю ключевую связь с League
. Я хочу иметь возможность устанавливать доступные варианты для Team
на основе значений, хранящихся в League
. В частности:
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))
Что мне нужно, чтобы использовать 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)])
1 ответ:
Рабочий ответ:
class TeamModelForm(ModelForm): def __init__(self, *args, **kwargs): super(TeamModelForm, self).__init__(*args, **kwargs) if self.instance: n = self.instance.number_of_teams self.fields['draft_position'].widget.choices = [(i+1,i+1) for i in range(n)] class Meta: model = Team widgets = {'draft_position': Select(choices=())}