2017-07-29 5 views
0

form.is_valid dans views.py retourne toujours false. J'ai utilisé des formes Django pour créer un formulaire et html pour l'implémenter.form.is_valid retourne toujours false

Je vais télécharger cette photo à imgur en utilisant imgurpython plus tard, mais d'abord cela devrait fonctionner.

views.py

def upload_view(request): 
usr = check_validation(request) 

if usr: 
    if request.method == "GET": 
     form = PostForm() 
     return render(request, 'upload.html', {'form': form}) 
    elif request.method == "POST": 
     form = PostForm(request.POST, request.FILES) 
     if form.is_valid(): 
      pic = form.cleaned_data.get('image') 
      title = form.cleaned_data.get('caption') 
      post = PostForm() 
      post.user = usr 
      post.caption = title 
      post.image = pic 
      post.save() 
      return redirect('feed/') 
     else: 
      return render(request, 'upload.html', {'error_msg' : "Invalid Inputs"}) 

else: 
    return redirect('/login/') 

models.py

class Post(models.Model): 
    user = models.ForeignKey(User) 
    image = models.FileField(upload_to='user_images') 
    caption = models.CharField(max_length=240) 
    image_url = models.CharField(max_length=255) 
    created_on = models.DateTimeField(auto_now_add=True) 

forms.py

class PostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = ['user', 'image', 'caption'] 

modèle - Upload.html

<form method="post" enctype="multipart/form-data" class="loginbox" style="margin-top:200px;"> 
    {% csrf_token %} 
     <p class="text-16">Upload to aperture.</p> 
    {{ form }} 
    <p class="text-16">{{ error_msg }}</p> 
    <input class="login-btn" type="submit" value="Upload"/> 
    </form> 
+0

S'il vous plaît lire [Dans quelles circonstances puis-je ajouter "urgent" ou d'autres phrases similaires à ma question, afin d'obtenir des réponses plus rapides?] (// meta.stackoverflow.com/q/326569) - le résumé est que cette Ce n'est pas un moyen idéal de s'adresser aux bénévoles, et il est probablement contreproductif d'obtenir des réponses. Merci de ne pas ajouter ceci à vos questions. – halfer

Répondre

1

Votre contexte a une seule variable nommée form donc vous devez l'utiliser seulement pour faire votre travail de formulaire.

<form method="post" enctype="multipart/form-data" class="loginbox" style="margin-top:200px;"> 
     {% csrf_token %} 
      <p class="text-16">Upload to aperture.</p> 
     <input type="file" accept="image/*" value="{{ form.image }}" name="image" class="login-btn"/><br/> 
     <input placeholder="Caption" class="input-default all-curve" rows="3" value="{{ form.caption }}" name="caption" /> 
     <p class="text-16">{{ form.error_msg }}</p> 
     <input class="login-btn" type="submit" value="Upload"/> 
     </form> 
+0

mon formulaires.py n'a pas seulement une forme il y a tellement et plus cette méthode n'a pas fonctionné :( –

+0

@YogeshKumar Votre champ image_url cause le problème Votre formulaire n'envoie pas ce champ et son vide c'est pourquoi c'est –

+0

ne devrait-il pas être '{{form}}'? Il se peut que le nom donné aux champs soit différent de ceux attendus par Django? –

0

Il est possible que les noms de votre entrée soient différents de ce que Django attend.

En d'autres termes, le request.POST peut contenir des données dans des clés différentes de celles attendues par le PostForm.

Essayez ceci,

<form method="post" enctype="multipart/form-data" class="loginbox" style="margin-top:200px;"> 
     {% csrf_token %} 
     {{ form }} 
     <input class="login-btn" type="submit" value="Upload"/> 
</form> 

Si cela ne fonctionne pas, imprimez la request.POST et request.FILES puis mettre à jour la réponse avec le contenu.