problema insertar registro en Django

389 views
Skip to first unread message

Luna

unread,
Apr 10, 2009, 4:33:59 PM4/10/09
to Django-es
Hola a toda la comunidad:
Soy Andrea y estoy iniciando en Django....tengo un problema

necesito insertar un registro de "Asistencia" pero no se como hacerlo
ya que tiene un campo many to many con "Alumno".

models.py
-------------------------------------------------------------
class Asistencia(models.Model):
alumno = models.ManyToManyField(Alumno)
fecha = models.DateField("Fecha")
asistencia= models.BooleanField()
-------------------------------------------------------------
class Alumno(models.Model):
rut= models.CharField(max_length=20, unique=True)
nombres= models.CharField("Nombres",max_length=50)
-------------------------------------------------------------------------------

Esto es lo que tengo en la views.py, pero no me funciona.

alumno = Alumno.objects.filter(id=id_alumno)
a =Asistencia(alumno= alumno, fecha = difference1,asistencia= True)
a.save()

----------------------------------------------------------------------------------
Agradecería cualquier ayuda, todos los comentarios serán bien
recibidos!!
gracias...

Andrea Luna.

Facundo Casco

unread,
Apr 10, 2009, 4:36:57 PM4/10/09
to djan...@googlegroups.com
Andrea podrias especificar un poco más el problema. Te aparece algun
mensaje de error? Te agrega algo a la base de datos? Ese codigo es
parte de una view, estas segura que se esta ejecutando?

Luna

unread,
Apr 10, 2009, 5:03:30 PM4/10/09
to Django-es
esta es mi función en la views



def recuperarAsistencia(request,asistencia):
..
...
for lista in dato:
id_alumno = lista[0:4]
dia = lista[5:]
difference1 = datetime.timedelta(days=-dif_dia)


alumn = Alumno.objects.get(id=id_alumno)
a =Asistencia(alumno= alumno, fecha = difference1,asistencia=
True)
a.save()
-----------------------------------------------------------------------------------------------------

sí...me aparece un mensaje de error al ejecutarlo, que es el
siguiente...



Exception Type: TypeError
Exception Value: 'alumno' is an invalid keyword argument for this
function

104. Asistencia.objects.create(alumno=alumn,fecha =
difference1,asistencia= True)



muchas gracias!
LUna

Facundo Casco

unread,
Apr 10, 2009, 5:10:27 PM4/10/09
to djan...@googlegroups.com
2009/4/10 Luna <ael...@gmail.com>:

> Exception Type:         TypeError
> Exception Value:        'alumno' is an invalid keyword argument for this
> function
>
> 104.           Asistencia.objects.create(alumno=alumn,fecha =
> difference1,asistencia= True)

Ese error te dice que 'alumno' no esta bien como keyword en
create(alumno=alumn...

Fijate que en esa misma pantalla de error te debe decir donde esta esa
linea de codigo.
Estas segura que existe un campo alumno en el modelo (tal vez te quedo
mal escrito)

Luna

unread,
Apr 10, 2009, 5:46:38 PM4/10/09
to Django-es

Facundo, aquí te dejo mi modelo, al parecer esta todo bien escrito:

---------------------------------------------------------------------------------
class Asistencia(models.Model):
alumno = models.ManyToManyField(Alumno)
echa = models.DateField("Fecha")
asistencia= models.BooleanField()


----------------------------------------------------------------------------------

la línea del error es la 104 de la views.py:


103 alumn = Alumno.objects.get(id=id_alumno)
104 a =Asistencia(alumno= alumn, fecha = difference1,asistencia=
True)
105 a.save()

muchas gracias por tus comentarios...
Luna



Ramiro Morales

unread,
Apr 10, 2009, 6:06:09 PM4/10/09
to djan...@googlegroups.com
2009/4/10 Luna <ael...@gmail.com>:

El campo relación m2m, al ser multivaluado no puede asignarse
de esa manera (usando el nombre del campo como keywork para
Asistencia.objects.create() o cuando contruyes la instancia de Asistencia
con Asistencia()).

Debes usar el método add()::

# ...
alumn = Alumno.objects.get(id=id_alumno)
a = Asistencia.objects.create(fecha=difference1,asistencia=True)
a.save()
a.alumno.add(alumn)

Ver:

http://docs.djangoproject.com/en/dev/ref/models/relations/#ref-models-relations

y


http://www.djangoproject.com/documentation/models/many_to_many/

Suerte,

--
Ramiro Morales
http://rmorales.net

Luna

unread,
Apr 10, 2009, 7:19:26 PM4/10/09
to Django-es
Gracias Ramiro!...leí la documentación y volvía probar....pero aún me
envía error en la línea 104


103 alumn = Alumno.objects.get(id=id_alumno)
104 a = Asistencia.objects.create
(fecha=difference1,asistencia=True)
105 #a.save()
106 a.alumno.add(alumn)


y este es el error:

Exception Type: TypeError
Exception Value: expected string or buffer

según lo que leí al usar Create no es necesario agregar el save(), asi
que lo comente.

gracias...

Ramiro Morales

unread,
Apr 10, 2009, 8:09:20 PM4/10/09
to djan...@googlegroups.com
2009/4/10 Luna <ael...@gmail.com>:

>
> Gracias Ramiro!...leí la documentación y volvía probar....pero aún me
> envía error en la línea 104
>
>
>  103    alumn = Alumno.objects.get(id=id_alumno)
>  104    a = Asistencia.objects.create
> (fecha=difference1,asistencia=True)
>  105    #a.save()
>  106    a.alumno.add(alumn)
>
>
> y este es el error:
>
> Exception Type:         TypeError
> Exception Value:        expected string or buffer

Entonces tienes otro problema, si realmente te reporta que el mismo
está en al línea 1034 no hay muchas opciones sobre cuál parte
de esa línea tiene un error ¿no?. Huele un poco feo que
asignes al campo DateField fecha difference1 que es un datetime.timedelta
pero no puedo realizar una prueba ahora para estar seguro.

Será cuestión de investigar y probar un poco porque ya estamos
hablando de experiencia y darse maña con Python y no tanto Django.

>según lo que leí al usar Create no es necesario agregar el save(), asi
> que lo comente.

Es cierto.

Luna

unread,
Apr 10, 2009, 10:16:06 PM4/10/09
to Django-es

Gracias Ramiro!...ya solucioné el problema, era la variable
difference1, que no corresponde a un DateField.
te pasastes! muchísimas gracias
Luna
Reply all
Reply to author
Forward
0 new messages