Domanda

Il seguente codice crea un modulo basato su un modello, Post. Problema che sto affrontando è che il modulo non convalida mai ValueRror Quello I dati non hanno convalidato Se rimuovo il if post_form.is_valid(): dai un'occhiata.

Tuttavia, se mantengo il codice come mostrato di seguito, cioè tengo il if post_form.is_valid(): controlla, quindi fallisce sempre e il else il blocco viene eseguito.

Stavo cercando di salvare l'utente, che è una tavola straniera dell'autenticazione di Django, nel mio modello e si scopre che non riesco nemmeno a superare questo errore di vlaidazione.

Qualsiasi aiuto sarà apprezzato. Grazie.

#----------------------------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--------------------------------------
È stato utile?

Soluzione

Nel tuo altro post, stavi cercando di inserire automaticamente il user campo, il che probabilmente significa che non hai un user campo visualizzato nel modello.

Escluderlo se si prevede di inserire comunque l'utente.

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

Altri suggerimenti

Mostra non valido, perché il modulo non è valido. Presumibilmente chiunque abbia presentato il modulo non ha compilato i campi richiesti. Se visualizzi il valore di form.errors vedrai perché.

In alternativa, anche se dobbiamo indovinare perché non hai mostrato il modello, non hai incluso tutti i campi richiesti nel modello stesso, quindi il modulo non sarà mai valido.

Rimuovere il primo else Clausola con la sua HttPresponse. La vista sarà quindi impostata predefinita per mostrare nuovamente il modulo, completo di errori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top