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--------------------------------------
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top