2016-02-18 60 views
1

我在寫一個django應用程序,我希望用戶能夠從下拉菜單中選擇一個[team_number],然後當它們碰到提交時被重定向到一個頁面呈現與該選擇相關聯的數據庫信息。我使用的是重定向類View,但是我遇到的問題是沒有下拉菜單顯示可以從html頁面team-stats.html中選擇[team_number]。django模型下拉菜單在HTML視圖中丟失

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> 

如果有我需要更新到這裏來顯示我想要做的任何其他文件,請讓我知道。謝謝

回答

1

試着改變你的看法變量名team_numbers,並更換您的團隊爲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')})            
+0

這樣做至少會在html視圖中創建一個下拉列表,但它不會被任何東西填充,它只是一個空的下拉列表 – alicen

+0

這意味着您的team_numbers視圖變量中沒有任何內容。我相信你可以查詢這些使用查詢設置: 'Team.objects.values('team_number')' 請確保您將團隊模型導入您的視圖 –

+0

我很困惑,該查詢將在哪裏?它應該顯示我在我的數據庫下有team_number的777個條目。團隊模型已被導入,因爲它在單獨的視圖中使用 – alicen

0

您的視圖變量被稱爲team_number。 嘗試改變TeamStatsViewteam_number

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

這工作添加一個整數輸入,但不是我的數據庫中的內容的下拉列表。此外,似乎我以前對views.py文件的幫助可能是錯誤的,因爲它試圖將新條目保存到數據庫,而不是使用選擇從數據庫中提取信息並顯示它 – alicen

+0

選項是否已修復?那麼你應該考慮在你的模型領域中加入「選擇」。否則請使用@ Nick-s答案 – ilse2005

1

您可以使用選擇=號碼

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' 
+0

我不想使用這樣的選項,因爲它是一個數據庫,有幾千個數字從中選擇 – alicen