2016-01-03 1 views
0

Donc le problème est que lorsque j'appelle les deux méthodes authorSearch et deleteAuthor dans views.py, form, is_valid() retourne toujours false.Pourquoi est-ce que mon formulaire.is_valid() retourne toujours false?

models.py

class Author(models.Model): 
    author_name = models.CharField(max_length=200,primary_key=True) 
    def __str__(self): 
      return self.author_name 

Forms.py

class AuthorForm(forms.ModelForm): 
    class Meta: 
      model = Author 
      fields = ['author_name',] 

views.py

def authorSearch(request): 
    if request.method=='POST': 
      form = AuthorForm(request.POST) 
      if form.is_valid(): 
        #some processing here 
        return render(request,'authorSearch.html',{}) 
      else: 
        return HttpResponse('No such Author Found!') 
    else: 
      form = AuthorForm() 
      return render(request,'authorSearch.html',{'form':form}) 

def deleteAuthor(request): 
    if request.method=='POST': 
      form=AuthorForm(request.POST) 
      if form.is_valid(): 
        #some processing here 
        return HttpResponse('Author deleted successfully!') 
      else: 
        return HttpResponse('Author deletetion failed!') 
    else: 
      form=AuthorForm() 
      return render(request,'deleteAuthor.html',{'form':form}) 

authorSearch.html

<div class='container'> 
{% if request.method == 'GET' %} 
    <form action='' method='POST'> 
      <!--Some html here --> 
    </form> 
{% elif request.method == 'POST' %} 
    <!--Some html here --> 
{% endif %} 
+0

Est-ce que vous soumettez vos formulaires avec des champs vides? – gtlambert

+0

Non !! bien sûr que non. Je remplis le formulaire avec le nom exact de l'auteur tel qu'il devrait être. –

+0

Je suppose que le problème est quelque part que j'ai fait une chaîne (author_name) la clé primaire qui comprend également des caractères espacés et tout ... alors peut-être quand il compare cela dans views.py il échoue pour une raison quelconque. –

Répondre

1

Une conjecture sauvage: vous avez oublié le jeton csrf.

Imprimez simplement les données réelles envoyées au formulaire et les erreurs pour voir ce qui se passe!

def authorSearch(request): 
    if request.method=='POST': 
     form = AuthorForm(request.POST) 
     if form.is_valid(): 
       #some processing here 
      return render(request,'authorSearch.html',{}) 
     else: 
      # you want to check what's happening here 
      # something like this (from memory, might be wrong): 
      print request.POST 
      print form.errors 
      print form.non_field_errors 

      return HttpResponse('No such Author Found!') 
    else: 
     form = AuthorForm() 
     return render(request,'authorSearch.html',{'form':form}) 

De plus, je vous recommande personnellement:

  • utilisation Charles ou quelque chose de similaire pour vérifier les demandes et les réponses HTTP
  • des tests d'écriture :)
+0

j'ai essayé form.errors et il dit que l'auteur avec ce nom d'auteur existe déjà ... essaye-t-il d'ajouter l'auteur ?? .. parce que j'ai utilisé Author.objects.get() pour obtenir l'objet et puis je le supprime avec la méthode .delete(). Donc, cette erreur n'aurait pas dû être là. –

+0

> sur l'utilisation de form.non_field_errors Je reçois ce message. Je pense que c'est dire que le champ n'est pas correct ... mais c'est vraiment le cas. –

+0

@AkashTomar Oh oui, vous avez mis 'primary_key = True', donc ce champ doit être unique. –