Django is_valid () renvoie ValueError lors de la présentation d'un formulaire. Pas certain de pourquoi

StackOverflow https://stackoverflow.com/questions/5370874

Question

Le code suivant crée un formulaire basé sur un modèle, Post. Problème Je suis face est que la forme valide et ne donne ValueError que données ne validait pas si je retire le contrôle de if post_form.is_valid():.

Cependant, si je garde le code comme illustré ci-dessous, qui est, je garde le contrôle de if post_form.is_valid():, il échoue toujours et le bloc else est exécuté.

Je tente de sauver l'utilisateur, qui est un ForeignKey à Auth de Django, dans mon modèle et il se trouve que je ne peux même pas passé cette erreur de vlaidation.

Toute aide sera appréciée. Merci.

#----------------------------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--------------------------------------
Était-ce utile?

La solution

Dans votre autre poste, vous essayiez de automatiquement insérer le champ user, ce qui signifie probablement que vous ne disposez pas d'un champ user affiché dans le modèle.

Ne comptez pas si vous prévoyez d'insérer l'utilisateur de toute façon.

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') 

Autres conseils

Il ne montre pas valide, parce que la forme est pas valide. On peut supposer que celui qui envoyé le formulaire n'a pas rempli les champs obligatoires. Si vous affichez la valeur de form.errors vous verrez pourquoi.

Sinon, même si nous devons deviner parce que vous ne l'avez pas montré le modèle, vous n'avez pas inclus tous les champs obligatoires dans le modèle lui-même, par conséquent, la forme ne sera jamais valide.

Supprimer la première clause de else avec son HttpResponse. La vue par défaut sera alors de montrer à nouveau le formulaire, avec des erreurs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top