2010-11-24 21 views
11

No sé qué hacer con este error. ¿Cómo agregar datos en SQL desde formularios usando el método de publicación?objeto no tiene ningún atributo 'guardar' 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'), 

Por lo tanto, puede añadir datos a DB, si voy siguiente manera - apenas añada

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

chicos por favor me ayuda con este problema. Pasé 3 días tratando de descubrir cuál es el problema, leyendo la documentación en djangoproject, etc. Realmente no entiendo qué está mal, en todas partes veo form.save() como un método estándar, pero no para mí.

+1

¿Realmente quería construir un 'AddTest' en la vista? –

+0

no hay acción de formulario ... action = '/ add' – mossplix

+1

@mossplix: irrelevante. Verificar el método significa que no se requiere una URL separada. –

Respuesta

20

Intente utilizar un ModelForm en lugar de un formulario:

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 

A continuación, en la vista de su código existente debe (más o menos) cubrirlo:

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 

Consulte los documentos para ModelForm here.

+0

Genial, realmente ayuda, ¿cómo puedo confundirlo? Otra pregunta por el momento: no ocurre nada cuando presiono el botón Cargar. "Esperando localhost" solo esto, no hay información en la pantalla, solo la salida que tengo en una consola: /Library/Python/2.6/site-packages/django/template/defaulttags.py:52: UserWarning: A { % csrf_token%} se utilizó en una plantilla, pero el contexto no proporcionó el valor. Esto generalmente es causado por no usar RequestContext. warnings.warn ("A {% csrf_token%} se usó en una plantilla, pero el contexto no proporcionó el valor. Esto generalmente se debe a que no se utiliza RequestCon – kurd

+0

@ user474092 - Puede que desee abrir una nueva pregunta para eso. como si necesitara poner un token csrf en su contexto de solicitud, como se muestra [en los documentos] (http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#how-to-use-it) . – Mikesname

Cuestiones relacionadas