2010-11-24 4 views
11

Ne sait pas quoi faire avec cette erreur. Comment ajouter des données dans SQL à partir de formulaires en utilisant la méthode post?l'objet n'a pas d'attribut 'save' Django

models.py

class Lala(models.Model): 
    PRIORITY_CHOICES = ( 
     (0, '1'), 
     (1, '2'), 
     (2, '3'), 
     (3, '4'), 
    ) 
    name = models.CharField(max_length=20) 
    date = models.DateField() 
    priority = models.CharField(max_length=1, choices=PRIORITY_CHOICES) 

Views.py

def add (request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = AddLala(request.POST) # A form bound to the POST data 
     if form.is_valid(): 
      newform = form.save() 

Form.py

class AddLala(forms.Form): 
    PRIORITY_CHOICES = ( 
     (0, '1'), 
     (1, '2'), 
     (2, '3'), 
     (3, '4'), 
    ) 
    name = forms.CharField(max_length=100) 
    date = forms.DateField() 
    priority = forms.CharField(max_length=1, widget=forms.Select(choices=PRIORITY_CHOICES)) 

add.html

<form target="upload_frame" action="" method="post" enctype="multipart/form-data" > 
{% csrf_token %} 
    {{ form.as_p }}<br> 
    <input type="submit" name="submit" value="Upload" id="submit"> 
</form> 

urls.py

(r'^add/$', 'QA.QAtool.views.add'), 
    (r'^addLala/$', 'QA.QAtool.views.addLala'), 

Alors, je peux ajouter des données sur DB, si je vais à côté chemin - il suffit d'ajouter

lala = Lala(id=None, name='teststep3', date='1943-12-12', priority='High') 
lala.save() 

Les gars s'il vous plaît aidez-moi cette question. J'ai passé 3 jours à essayer de comprendre ce qui ne va pas, lire la documentation sur djangoproject, etc. Je ne comprends vraiment pas ce qui ne va pas, partout je vois form.save() comme une méthode standard, mais pas pour moi.

+1

Aviez-vous vraiment l'intention de construire un 'AddTest' dans la vue? –

+0

il n'y a pas d'action de formulaire ... action = '/ add' – mossplix

+1

@mossplix: non pertinent. La vérification de la méthode signifie qu'une URL distincte n'est pas requise. –

Répondre

20

Essayez d'utiliser un ModelForm à la place d'un formulaire:

class Lala(models.Model): 
    PRIORITY_CHOICES = ( 
     (0, '1'), 
     (1, '2'), 
     (2, '3'), 
     (3, '4'), 
    ) 
    name = models.CharField(max_length=20) 
    date = models.DateField() 
    priority = models.CharField(max_length=1, choices=PRIORITY_CHOICES) 

En forms.py:

from django import forms 

class LalaForm(forms.ModelForm): 
    class Meta: 
     model = Lala 

Puis dans la vue de votre code existant devrait (à peu près) le couvrir:

def add (request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = LalaForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): 
      form.save() # saves a new 'Lala' object to the DB 

Découvrez les documents pour ModelForm here.

+0

Grand ça aide vraiment, comment je peux l'obtenir. Une autre question pour l'instant - rien ne se passe quand j'appuie sur le bouton Upload. "Waiting for localhost" seulement ceci, il n'y a aucune information sur l'écran, seulement la sortie que j'ai dans une console: /Library/Python/2.6/site-packages/django/template/defaulttags.py:52: UserWarning: A { % csrf_token%} a été utilisé dans un modèle, mais le contexte n'a pas fourni la valeur. Cela est généralement dû au fait de ne pas utiliser RequestContext. warnings.warn ("A {% csrf_token%} a été utilisé dans un modèle, mais le contexte n'a pas fourni la valeur.Ceci est généralement dû au fait que RequestCon n'est pas utilisé – kurd

+0

@ user474092 - Vous pourriez vouloir ouvrir une nouvelle question pour cela. comme vous avez besoin de mettre un jeton csrf dans votre contexte de requête, comme indiqué [dans les docs] (http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-it) . – Mikesname