django模型形式,根据ForeignKey模型中的值限制选择

标签 django django-models django-forms django-views

我有两个模型:LeagueTeamTeam 有一个指向 League 的外键链接。我希望能够根据 League 中存储的值设置可供 Team 使用的选项。具体来说:

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(?????????)])

我认识到我无法在 Team 模型中准确定义我的 draft_slot.choices。所以我希望像这样建立团队:

class Team(models.Model):
    league = models.ForeignKey(League)
    draft_slot = models.IntegerField()

我已经建立了TeamModelForm:

class TeamModelForm(ModelForm):
    class Meta:
        model = Team

以及团队 ModelForm的 View :

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.idleague.number_of_teams 以便 TeamModelForm 的 View 预填充 team .league 并渲染一个字段来表示 team.draft_slot ,看起来像

draft_slot = models.IntegerField(choices=[(i+1,i+1) for i in range(league.number_of_teams+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=())}

关于django模型形式,根据ForeignKey模型中的值限制选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075619/

相关文章:

python - 如何获取特定模型的 id?

django - 多对多排除多个对象

python - 将用户添加到 Django 中的组

django - 检查小部件级别的错误和其他值 - 可能使用自定义表单字段

python - AppEngine 上的 Django 表单验证框架 : How to strip out HTML etc.?

Django ModelChoiceField 下拉框自定义填充

django - django的model field options `` blank `` and ` `null `` when they' re not set的默认值是多少?

Django 管理员 : how to display properties defined on model in an inline?

python - 如何在django模板中显示引号

python - 在 Django 模板中增加一个变量