Pregunta

El siguiente código crea un formulario basado en un modelo, Post. El problema que me enfrento es que la forma nunca valida y da ValueError que los datos no validaban Si quito el if post_form.is_valid(): controlar.

Sin embargo, si guardo el código como se muestra a continuación, es decir, guardo el if post_form.is_valid(): comprobar, luego siempre falla y el else se ejecuta el bloque.

Estaba tratando de salvar al usuario, que es una Key Key para la autenticación de Django, en mi modelo y resulta que ni siquiera puedo superar este error de vlaidación.

Cualquier ayuda será apreciada. Gracias.

#----------------------------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--------------------------------------
¿Fue útil?

Solución

En su otra publicación, estaba tratando de insertar automáticamente el user campo, lo que probablemente significa que no tienes un user campo que se muestra en la plantilla.

Exclúelo si planea insertar al usuario de todos modos.

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

Otros consejos

No se muestra válido, porque el formulario no es válido. Presumiblemente, quien presentó el formulario no completó los campos requeridos. Si muestra el valor de form.errors Verás por qué.

Alternativamente, aunque tenemos que adivinar porque no ha mostrado la plantilla, no ha incluido todos los campos requeridos en la plantilla en sí, por lo tanto, el formulario nunca será válido.

Retire el primero else cláusula con su httpresponse. La vista luego debe mostrar el formulario nuevamente, completo con errores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top