django 外键下拉重定向到 html 页面

django foreignkey dropdown redirect to html page

我正在尝试创建一个具有单个下拉输入的 Django 页面,引用具有数千个条目的数据库,当用户选择其中一项并点击 "submit" 时,它将重定向它们到一个 html 页面,该页面生成他们选择的项目的统计信息。我已经尝试了几件事,但没有任何效果,我最近尝试的是我在这里找到的东西,虽然我也无法让它工作,它向我抛出这个错误:"local variable 'team_number' referenced before assignment"

views.py:

def team_stats(request):
    if request.method == 'POST':
        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_to_response('team-stats.html', {
        'team_number': team_number,
    })

forms.py:

class TeamStats(forms.ModelForm):
    model = Team
    fields = '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'

我希望我所寻求的帮助是有意义的。如果没有,我会尝试更好地解释它。谢谢

我注意到有几处错误,但导致问题的原因是如果方法不是 post,你永远不会设置 team_number,所以你不应该将其包含在上下文数据中

我还更改了您的视图以使用视图 class 而不是基于函数的视图,这将允许视图针对不允许的请求引发不允许的响应

from django.views.generic import View
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 })

要使用它,您必须更改 url、

的目标
 url('your_url_regex', TeamStatsView.as_view(), name='should be here'),

我还更改了您的代码以使用 render 而不是 render_to_response,因为后者不使用请求并且可能会被删除


The edited version is now throwing an error back "ModelForm has no model class specified."

那是因为需要在表单的元数据上设置模型

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