2011-05-07 3 views
1

J'ai utilisé les formes de Django de cette manière et ont obtenu une erreur: Erreur: invalid literal for int() with base 10: 'check 'erreur de vues dans Django

#this is forms.py  
from django import forms 

    class PersonalInfo(forms.Form): 
     Name = forms.CharField(max_length=20) 
     Email_ID = forms.EmailField(required=False) 
     Address = forms.CharField(max_length=50,required=False) 
     Contact_Phone = forms.CharField(max_length=20) 
     Image = forms.FileField(required=False) 

Le PersonalInfo est utilisé dans register.html

#This is view.py, register calling register.html 
    def register(request): 
     form = PersonalInfo() 
     return render_to_response('register.html', {'form':form}, context_instance=RequestContext(request)) 

En register.html c'est la façon dont je vais l'utiliser:

  {% if form.errors %} 
      <p style="color: red;"> 
       Please correct the error{{ form.errors|pluralize }} below. 
      </p> 
      {% endif %} 

      <form action="/uregister/" method="post"> 
       <table> 
        {{ form.as_table }} 
       </table> 
       <input type="submit" value="Submit"> 
      </form> 

Ceci est des vues d'uregi ster:

def uregister(request): 
    if request.method == 'POST': 
    form = PersonalInfo(request.POST) 
     if form.is_valid(): 
      cd = form.cleaned_data 
       per_job = Personal(cd['Name'], cd['Email_ID'], cd['Address'], cd['Contact_Phone'], cd['Image']) 
       per_job.save() 
       return HttpResponseRedirect('/') 
     else: 
      form = PersonalInfo() 
      return render_to_response('register.html', {'form': form}, context_instance=RequestContext(request)) 

Ce modèle est le personnel dans models.py:

class Personal(models.Model): 
    name = models.CharField(max_length=20) 
    email = models.EmailField(blank=True,null=True) 
    address = models.CharField(max_length=50,blank=True,null=True) 
    contact = models.CharField(max_length=20) 
    pic = models.FileField(upload_to='image/',blank=True,null=True) 

L'erreur que je reçois est:

invalid literal for int() with base 10: 'check' 

et

Exception Type: ValueError 
Exception Value: invalid literal for int() with base 10: 'check' 
Exception Location: /usr/local/lib/python2.6/dist-packages/django/db/models/fields/__init__.py in get_prep_value, line 479 

Check est le nom que j'avais donné comme dans le mannequin Les données. Quelqu'un peut-il me dire où je vais mal? S'il vous plaît.

Mise à jour: Trace

Traceback: 
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/nagaraj/ghar/gharnivas/views.py" in uregister 
    49.     per_job.save() 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/base.py" in save 
    460.   self.save_base(using=using, force_insert=force_insert, force_update=force_update) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/base.py" in save_base 
    522.       manager.using(using).filter(pk=pk_val).exists())): 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py" in filter 
    550.   return self._filter_or_exclude(False, *args, **kwargs) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py" in _filter_or_exclude 
    568.    clone.query.add_q(Q(*args, **kwargs)) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py" in add_q 
    1172.        can_reuse=used_aliases, force_having=force_having) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/query.py" in add_filter 
    1107.     connector) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/where.py" in add 
    67.    value = obj.prepare(lookup_type, value) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/sql/where.py" in prepare 
    316.    return self.field.get_prep_lookup(lookup_type, value) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/fields/__init__.py" in get_prep_lookup 
    292.    return self.get_prep_value(value) 
File "/usr/local/lib/python2.6/dist-packages/django/db/models/fields/__init__.py" in get_prep_value 
    479.   return int(value) 

Exception Type: ValueError at /uregister/ 
Exception Value: invalid literal for int() with base 10: 'check 

Répondre

2

Je pense que le problème est dans la ligne

per_job = Personal(cd['Name'], cd['Email_ID'], cd['Address'], cd['Contact_Phone'], cd['Image']) 

Je ne sais pas s'il est possible de créer une instance de modèle avec uniquement des paramètres de position, mais ce n'est pas mentionné dans les docs. Vous devriez être using keyword parameters:

per_job = Personal(name=cd['Name'], email=cd['Email_ID'], etc. 

L'erreur que vous voyez résulte probablement d'essayer de assing valeur non entière au champ de base de données par défaut avec l'ID d'objet, il pourrait être causé par cela.


En ce qui concerne les autres:

  • image ne sont pas stockées probablement parce que vous n'êtes pas using form attributeenctype="multipart/form-data" qui est nécessaire pour traiter correctement les fichiers téléchargés.
  • Les erreurs ne s'affichent probablement pas, car elles sont contenues dans le formulaire après validation, et vous le remplacez par une instance vide dans la branche else: de votre vue uregister.
+0

Merci pour votre réponse, Maintenant l'erreur de 'littéral invalide pour int() avec base 10: 'check'' est supprimée. Mais, même si l'enregistrement est stocké. Le ** Image ** n'est pas stocké et aussi ** erreur ** (s) du formulaire n'est pas montré avec le bouton soumettre pressé avec des données dans la zone de texte :( –

+0

@padmaprasad: Oh. Il y a d'autres choses qui pourraient aider aussi, j'ai mis à jour la réponse – che

+0

Merci beaucoup .. Cela fonctionne parfaitement :) –