2015-08-23 25 views
0

我有以下形式:Django的形式檢查

<form action="" method="post"> 
     {% csrf_token %} 
     <select name="selectTeamOne"> 

      {% for x in currentTeams %} 

       {% if x.teamid != 66 %} 

        <option value={{x.teamid}}>{{x.teamname}}</option> 

       {% endif %} 

      {% endfor %} 

     </select> 

     <select name="selectTeamTwo"> 

      {% for x in currentTeams %} 

       <option value={{x.teamid}}>{{x.teamname}}</option> 

      {% endfor %} 

     </select> 

     <input type="submit" value="Submit" /> 
    </form> 

這是由以下幾種觀點驅動:

def selectteams(request, soccerseason, fixturematchday): 

    if request.method == 'POST': 

     if form.is_valid(): 

      return HttpResponse("Two different teams were selected.") 

     else: 
      return HttpResponse("Two different teams were not selected.") 


    fixtures = StraightredFixture.objects.filter(soccerseason=soccerseason,fixturematchday=fixturematchday).order_by('fixturedate') 

    currentTeams = StraightredTeam.objects.filter(currentteam=1).order_by('teamname') 

    cantSelectTeams = UserSelection.objects.filter(campaignno=389100069).order_by('campaignno') 

    return render(request, 'straightred/test.html', 
        {'fixtures' : fixtures, 
        'currentTeams' : currentTeams, 
        'cantSelectTeams' : cantSelectTeams, 
        'soccerseason' : soccerseason, 
        'fixturematchday' : fixturematchday}) 

我只是想知道檢查的最佳方式,如果用戶已經選擇了相同從下拉列表中選擇兩次並返回相關的HttpResponse,如上所示。

任何意見指向我在正確的方向表示讚賞。非常感謝,艾倫。

+0

https://docs.djangoproject.com/en/1.8/ref/forms/validation /#清理和驗證字段,這取決於彼此 – cdvv7788

+0

我不使用Django來創建窗體本身。這首先是不是很大? –

+1

表單是一個強大的工具,所以最好在可以的地方使用它們。要從模型或查詢集創建一個選擇,您可以使用https://docs.djangoproject.com/en/1.8/ref/forms/fields/#django.forms.ModelChoiceField – cdvv7788

回答

1

您可以在Django的形式強制服務器級別的驗證: https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

從文檔Django的1.8:

from django import forms 

class ContactForm(forms.Form): 
    # Everything as before. 
    ... 

    def clean(self): 
     cleaned_data = super(ContactForm, self).clean() 
     cc_myself = cleaned_data.get("cc_myself") 
     subject = cleaned_data.get("subject") 

     if cc_myself and subject: 
      # Only do something if both fields are valid so far. 
      if "help" not in subject: 
       raise forms.ValidationError(
        "Did not send for 'help' in the subject despite " 
        "CC'ing yourself." 
       )