Django is_valid () löst ValueError beim Einreichen eines Formulars aus. Nicht sicher warum
-
27-10-2019 - |
Frage
Der folgende Code erstellt ein Formular basierend auf einem Modell. Post
. Problem, mit dem ich ausgesetzt bin, ist, dass das Formular nie validiert und gibt ValueError das Daten wurden nicht bestätigt Wenn ich das entferne if post_form.is_valid():
überprüfen.
Wenn ich den Code jedoch wie unten gezeigt behalte, halte ich die if post_form.is_valid():
Überprüfen Sie, dann scheitert es immer und die else
Block wird ausgeführt.
Ich habe versucht, den Benutzer, der für Djangos Auth, in meinem Modell ein Fremdkey ist, und es stellt sich heraus, dass ich nicht einmal diesen Fehler über die Vlaidation hinausgehen kann.
Jede Hilfe wird geschätzt. Vielen Dank.
#----------------------------Model--------------------------------------
class Post (models.Model):
name = models.CharField(max_length=1000, help_text="required, name of the post")
user = models.ForeignKey(User, unique=False, help_text="user this post belongs to")
def __unicode__(self):
return self.name
class PostForm(ModelForm):
class Meta:
model = Post
#----------------------------./Model--------------------------------------
#----------------------------View--------------------------------------
@login_required
def create_post (request):
if request.method == 'POST':
post_form = PostForm(request.POST)
if post_form.is_valid():
post.save()
return render_to_response('home.html')
else:
return HttpResponse('not working')
else:
post_form = PostForm()
return render_to_response('create.html', {'post_form':post_form })
#----------------------------./View--------------------------------------
#----------------------------./Template--------------------------------------
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>home</title>
</head>
<body>
<form method="POST" action='.'>{% csrf_token %}
<p>{{post_form.name.label_tag}}</p>
<p>{{post_form.name}}</p>
<p><input type="submit" value="Submit"/></p>
</form>
</body>
</html>
#----------------------------./Template--------------------------------------
Lösung
In Ihrem anderen Beitrag haben Sie versucht, die automatisch einzulegen user
Feld, was wahrscheinlich bedeutet, dass Sie keine haben user
Feld in der Vorlage angezeigt.
Schließen Sie es aus, wenn Sie den Benutzer sowieso einfügen möchten.
class PostForm(ModelForm):
class Meta:
model = Post
exclude = ('user',) # exclude this
if request.method == 'POST':
post_form = PostForm(request.POST)
if post_form.is_valid():
post = post.save(commit=False)
post.user = request.user
post.save() # now post has a user, and can actually be saved.
return render_to_response('home.html')
Andere Tipps
Es zeigt nicht gültig, da das Formular nicht gültig ist. Vermutlich füllte derjenige, der das Formular eingereicht hat, die erforderlichen Felder nicht aus. Wenn Sie den Wert von anzeigen form.errors
Sie werden sehen, warum.
Alternativ, obwohl wir erraten müssen, weil Sie die Vorlage nicht gezeigt haben, haben Sie nicht alle erforderlichen Felder in die Vorlage selbst aufgenommen, daher wird das Formular niemals gültig sein.
Entfernen Sie den ersten else
Klausel mit seiner httpresponse. Die Ansicht wird dann standardmäßig das Formular mit Fehlern angezeigt.