2016-09-21 72 views
0

我有以下形式:Django表單失敗

# coding=utf-8 

class SelectTwoTeams(BootstrapForm): 

    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user', None) 
     self.currentSelectedTeam1 = kwargs.pop('currentSelectedTeam1', None) 
     self.currentSelectedTeam2 = kwargs.pop('currentSelectedTeam2', None) 
     self.currentfixturematchday = kwargs.pop('currentfixturematchday', None) 
     self.currentCampaignNo = kwargs.pop('currentCampaignNo', None) 
     super(SelectTwoTeams, self).__init__(*args, **kwargs) 

     cantSelectTeams = UserSelection.objects.select_related().filter(~Q(fixtureid__fixturematchday=self.currentfixturematchday),campaignno=self.currentCampaignNo) 

     if not cantSelectTeams: 
      queryset = StraightredTeam.objects.filter(currentteam = 1) 
     else: 
      queryset = StraightredTeam.objects.filter(currentteam = 1).exclude(teamid__in=cantSelectTeams.values_list('teamselectionid', flat=True)) 


     self.fields['team1'].queryset = queryset 
     self.fields['team2'].queryset = queryset 
     self.fields['team1'].initial = self.currentSelectedTeam1 
     self.fields['team2'].initial = self.currentSelectedTeam2 

    team1 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None, 
           widget=forms.Select(attrs={"class":"select-format",'onchange': 'this.form.submit();'})) 
    team2 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None, 
           widget=forms.Select(attrs={"class":"select-format",'onchange': 'this.form.submit();'})) 

    def clean(self): 
     cleaned_data = self.cleaned_data # individual field's clean methods have already been called 
     team1 = cleaned_data.get("team1") 
     team2 = cleaned_data.get("team2") 
     if team1 == team2: 
      raise forms.ValidationError("You picked the same team!") 

     return cleaned_data 

如果我用我的HTML文件以下,並選擇同一兩隊它正確地說:「你選擇了同一個團隊!」:

<form action="" method="post"> 
     {% csrf_token %} 
     {{ form }} 
    </form> 

不過,如果我使用以下命令:

<form action="" method="post"> 
     {% csrf_token %} 
     {{ form.team1 }}{{ form.team2 }} 
    </form> 

我沒有得到任何反饋。當我選擇相同的兩支球隊時,什麼都不會發生任何想法爲什麼分離領域停止它的工作?

非常感謝,艾倫。

回答

1

這些之間的差異並不是「分離領域」。這是你已經從完整的形式表示 - 包括表單標籤,佈局和最重要的錯誤 - 切換到只顯示兩個輸入字段本身。

這當然很好,至於大多數目的,你會想要它給你的額外的佈局控制,但你需要記住把基本{{ form }}版本所做的所有其他事情。

{{ form.non_field_errors }} 
{{ form.team1.label_tag }}{{ form.team1 }}{{ form.team1.errors }} 
{{ form.team2.label_tag }}{{ form.team2 }}{{ form.team2.errors }} 
+0

使完整感,謝謝:) –