Ich habe eine clean_message
Methode in meiner forms.py
erstellt, die überprüft, ob die self.message
etwas hat, und löst eine ValidationError
, falls nicht.So zeigen Sie Warnmeldungen in Django an
"""
Comment
"""
class CommentForm(forms.Form):
"""
Comment field
"""
comment = forms.CharField(
widget = forms.Textarea(
attrs = {
'class': 'form-control',
'rows': 2
}
)
)
def clean_comment(self):
if self.cleaned_data['comment'] is None:
raise form.ValidationError({'comment': ['You must enter your comment'])
Und das ist die Ansichtsdatei. Was brauche ich, um die Fehler anzuzeigen, wie oben gezeigt?
<form action="comment" method="POST">
{% csrf_token %}
<div class="form-group">
{{ form.comment.errors }}
{{ form.comment }}
</div>
<div class="form-group">
<input type="submit" value="Say it" class="btn btn-success">
</div>
</form>
Ich habe versucht, {{ form.errors }}
zu verwenden, über sie iterieren, {{ form.non_field_errors }}
usw. zu verwenden, aber keine gearbeitet. Ich denke irgendwie ich lade das Formular neu, und so werden die Nachrichten nicht angezeigt.
Unten ist mein write_comment
Verfahren, ausgeführt das Verfahren, wenn Sie auf den Button einen Kommentar zu hinterlassen:
def write_comment(request, post_id):
"""
Write a new comment to a post
"""
form = CommentForm(request.POST or None)
if form.is_valid():
post = Post.objects.get(pk = post_id)
post.n_comments += 1
post.save()
comment = Comment()
comment.comment = request.POST['comment']
comment.created_at = timezone.now()
comment.modified_at = timezone.now()
comment.post_id = post_id
comment.user_id = 2
comment.save()
else:
form = CommentForm()
return redirect(reverse('blog:post', args = (post_id,)))
Ich würde überprüfen Sie die "Aktion" Ihres Formulars. Sind Sie sicher, dass Sie die richtige URL veröffentlichen? In einem anderen Hinweis gibt es keinen Grund, diese Art von Validierung zu machen. Wenn Sie das Feld "required" auf das Feld setzen, wird dies für Sie erledigt. – rnevius
Ich habe die 'required' bereits eingefügt und die' clean_comment' Methode entfernt. Ich habe irgendwo gelesen, dass das Formular nicht neu geladen werden muss, um die Fehler anzuzeigen, und ich denke, dass genau das passiert, aber ich weiß nicht, wie ich es beheben kann. Alles, was ich bisher versucht habe, hat nicht funktioniert. – mfgabriel92
Es gibt mindestens zwei Probleme mit der Ansicht. Erstens, indem Sie 'form = CommentForm()' in der 'else' Anweisung setzen, ersetzen Sie das ungültige Formular (mit Fehlern) durch ein leeres Formular. Zweitens sollten Sie eine Vorlage rendern, die das Formular enthält. Sie leiten stattdessen um. – Alasdair