2017-11-14 2 views
0

Ich versuche Validierungen in meinem Formular zu setzen, aber nachdem ich die offizielle Dokumentation und die Tutorials befolgt habe, erhalte ich keine Lösung. Dies ist mein Code: (Die Variablen der Klasse sind iddented)Django Formular Validierung funktioniert nicht

class QuestionForm(forms.Form): 
subject = forms.CharField(widget=forms.Select(attrs={'class': 'select'}, 
          choices=SUBJECTS_SELE), 
          label='Materia') 
question = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 1}), 
          label='Pregunta', 
          max_length=5000) 
answer = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 1}), 
         label='Respuesta correcta', 
         max_length=1000) 
answerOne = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'rows': 1}), 
          label='Respuesta incorrecta', 
          max_length=1000, 
          required=True) 

def clean_question(self): 
    question = self.cleaned_data.get('question') 
    a = "0" 
    if not a in question: 
     raise forms.ValidationError("Es obligatorio llenar este campo") 
    return question 


def clean_answer(self): 
    answer = self.cleaned_data.get('answer') 
    a = "0" 
    if not a in answer: 
     raise forms.ValidationError("Es obligatorio llenar este campo") 
    return answer 

Auch habe ich auf diese Weise versuchen:

def clean(self, *args, **kwargs): 
     question = self.cleaned_data.get('question') 
     answer = self.cleaned_data.get('answer') 
     if question != "0": 
      raise forms.ValidationError("Es obligatorio llenar este campo") 
     if answer != "0": 
      raise forms.ValidationError("Es obligatorio llenar este campo") 
     return super(QuestionForm, self).clean(*args, **kwargs) 

In diesem Fall wird die Ansicht auf diese Form entspricht das einer folgendes:

Die Variablen, die an das Objekt übergeben werden, dienen zum Speichern in einem BBDD.

verwirklichte --------------------

Nachdem die Optionen versuchen, die Leute meine in den coments recomended, ich nicht die Validierungsnachricht sehen war, und In dem Moment, in dem ich den Teil des Codes habe, der die Seite neu lädt, nachdem ich das Formular ausgeführt habe, konnte ich die Validierungsnachricht sehen.

mein html und javascript:

<div class="col-md-6"> 
     {% if form %} 
     <form action="" method="POST" id="askFortm"> {% csrf_token %} 
      {{ form.as_p }} 
      <button class="btn btn-lg btn-primary enviar" id="enviar" type="submit" value="Enviar">Introducir otra 
       pregunta</button> 
      </form> 
      {% endif %} 
    </div> 

<script> 

    $(function() { 
     var counter = 94; 
     $("#enviar").click(function() { 
      counter = counter + 1; 
       //alert(counter); 
       localStorage.setItem("counter",counter); 
       alert('Su pregunta ha sido enviada correctamente. ' + 
        'Envía otra y tendras más posibilidades de ganar los Airpods.'); 
      }); 
     $('#askFortm').on('submit', function(e) { 
       e.preventDefault(); 
       setTimeout(function() { 
        window.location.reload(); 
       },0); 
       this.submit(); 
     }); 
    }); 

    </script> 

Ich nehme an, dass das Problem Beziehung mit dem Reload-Seite sein kann, ist möglich, ich die csrf_token vergleichen oder wie diese some? Können Sie mir helfen, danke.

+0

nun verwirklichte es meinen Kommentar mit dem Blick auf dieses Formular. –

Antwort

0

Endlich habe ich lösen diese eine HttpResponseRedirect in meinen Ansichten setzen:

def ayudanos(request): 
form = QuestionForm(request.POST or None) 
if form.is_valid(): 
    form_data = form.cleaned_data 
    subject = form_data.get("subject") 
    question = form_data.get("question") 
    answer = form_data.get("answer") 
    answerOne = form_data.get("answerOne") 
    answerTwo = form_data.get("answerTwo") 
    name = form_data.get("name") 
    email = form_data.get("email") 
    obj = QuestionSele.objects.create(subject=subject, question=question, answer=answer, answerOne=answerOne, 
             answerTwo=answerTwo, name=name, email=email) 
    return HttpResponseRedirect(reverse('ayudanos')) 
context = { 
    "form": form 
} 
return render(request, "ayudanos.html", context) 
0
class QuestionForm(forms.Form): 
    subject = forms.CharField(widget=forms.Select(attrs={'class': 'select'}, 
          choices=SUBJECTS_SELE), 
          label='Materia') 
    question = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 1}), 
          label='Pregunta', 
          max_length=5000) 
    answer = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 1}), 
         label='Respuesta correcta', 
         max_length=1000) 
    answerOne = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'rows': 1}), 
          label='Respuesta incorrecta', 
          max_length=1000, 
          required=True) 

    def clean_question(self): 
     question = self.cleaned_data.get('question') 
     a = "0" 
     if a not in question: 
      raise forms.ValidationError("Es obligatorio llenar este campo") 
     return question 


    def clean_answer(self): 
     answer = self.cleaned_data.get('answer') 
     a = "0" 
     if a not in answer: 
      raise forms.ValidationError("Es obligatorio llenar este campo") 
     return answer 
+0

Ihr Code funktioniert zwar, aber das Problem ist nicht hier, der Kommentar wurde aktualisiert. –

0

Ich glaube, wenn der Benutzer den Wert im Most Feld Frage oder Antwort gegeben hat, wird es leer sein, so sollte unter Code arbeiten.

class QuestionForm(forms.Form): 
    subject = forms.CharField(widget=forms.Select(attrs={'class': 'select'}, 
          choices=SUBJECTS_SELE), 
          label='Materia') 
    question = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 1}), 
          label='Pregunta', 
          max_length=5000) 
    answer = forms.CharField(widget=forms.Textarea(attrs={'class': 'form-control', 'rows': 1}), 
         label='Respuesta correcta', 
         max_length=1000) 
    answerOne = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control', 'rows': 1}), 
          label='Respuesta incorrecta', 
          max_length=1000, 
          required=True) 

    def clean_question(self): 
     question = self.cleaned_data.get('question') 

     if not question: 
      raise forms.ValidationError("Es obligatorio llenar este campo") 
     return question 


    def clean_answer(self): 
     answer = self.cleaned_data.get('answer') 

     if not answer: 
      raise forms.ValidationError("Es obligatorio llenar este campo") 
     return answer 
+0

Funktioniert auch nicht. –

+0

Welche Art von Daten ist standardmäßig für dieses Feld? –

+0

Sorry, dieser Code funktioniert gut, wie funktioniert mein Code und der Code des ersten Kommentars, komm ich Bearbeiten Sie den Kommentar, um das Problem erneut zu erklären, da das Problem durch JavaScript-Code Teil verursacht wird. –

Verwandte Themen