html视图中缺少django模型下拉列表

时间:2016-02-18 23:31:09

标签: python html django redirect django-models

我正在编写一个django应用程序,我希望用户能够从下拉菜单中选择[team_number],然后当他们点击提交时重定向到一个页面,该页面呈现出与之关联的数据库信息那个选择。我正在使用重定向类View,但我遇到的问题是没有下拉菜单显示从html页面team-stats.html上选择[team_number]。

views.py:

class TeamStatsView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'team-stats.html',
                      {'team_number': TeamStats()})

    def post(self, request, *args, **kwargs):
        team_number = TeamStats(request.POST, request.FILES)
        if team_number.is_valid():
            # do stuff & add to database
            team_number.save()
            team_number = TeamStats.objects.create()
            # use my_file.pk or whatever attribute of FileField your id is
            # based on
            return HttpResponseRedirect('/team-stats/%i/' % team_number.pk)
        return render(request, 'team-stats.html', {'team_number': team_number})

models.py:

class Team(models.Model):
    team_number = models.IntegerField()
    team_notes = models.CharField(max_length=150)
    event_id = models.ForeignKey(
        'Event', on_delete=models.CASCADE, unique=False)

    def __unicode__(self):
        return str(self.team_number)

    class Meta:
        db_table = 'teams'
        app_label = 'frcstats'

forms.py:

class TeamStats(forms.ModelForm):
    class Meta:
        model = Team
        fields = ['team_number']

团队stats.html时:

<form method="post" action="">
  {% csrf_token %} {{ TeamStatsView }}
  <input type="submit" value="Submit" />
</form>

如果我需要更新其他文件以显示我正在尝试做的事情,请告诉我。感谢

3 个答案:

答案 0 :(得分:1)

尝试将您的视图变量名称更改为team_numbers,并使用以下内容替换team-stats.html片段:

<form method="post" action="">
    <select name="teams">
    {% for team_number in team_numbers %}
        <option value="{{ team_number }}">Team Num: {{ team_number }}</option>
    {% endfor %}
    </select>
</form>

然后将您的观点更新为:

class TeamStatsView(View):
    def get(self, request, *args, **kwargs):
        return render(request, 'team-stats.html',
            {'team_numbers':Team.objects.values('team_number')})                                             

答案 1 :(得分:1)

您可以使用choices = NUM​​BERS

NUMBERS = (
    ('1','1'),
    ('2','2'),
    ('3','3'),
    ('4','4')
)
class Team(models.Model):
    team_number = models.IntegerField(choices=NUMBERS )
    team_notes = models.CharField(max_length=150)
    event_id = models.ForeignKey(
        'Event', on_delete=models.CASCADE, unique=False)

    def __unicode__(self):
        return str(self.team_number)

    class Meta:
        db_table = 'teams'
        app_label = 'frcstats'

答案 2 :(得分:0)

您的视图变量名为team_number。 尝试将TeamStatsView更改为team_number

<form method="post" action="">
  {% csrf_token %} {{ team_number }}
  <input type="submit" value="Submit" />
</form>