ManyToMany y otros demonios del django

81 views
Skip to first unread message

yusbel

unread,
Jun 18, 2010, 9:38:34 AM6/18/10
to Django-es
Tengo un problema grave con las relaciones ManyToMany y ya no se de
donde sacar aquí les dejo mas menos como es el problema.
models.py
------------------------------
class Estudiante(models.Model):
#aquí tengo una serie de atributos que no son de interés
estudiante_organizacion = models.ManyToManyField(Organizacion)
estudiante_asignatura = models.ManyToManyField(Asignatura,
through='EstudianteAsignatura')
-----------------------------
Ahora bien les explico que tuve que hacer un modelo intermedio para
estudiante_asignatura porque ahí se me creaba una relación de muchos a
muchos entre 3 tablas y entonces puse los atributos de la tercera
tabla en la intermediaria de la manytomany, ahi les va la otra
parte(la clase intermedia)
----------------------------
class EstudianteAsignatura(models.Model):
id = models.AutoField(primary_key=True)
estudiante_id = models.ForeignKey(Estudiante)
asignatura_id = models.ForeignKey(Asignatura)
evaluacion_id = models.ForeignKey(Evaluacion, null="TRUE",
blank="TRUE")
def __unicode__(self):
return unicode(self.asignatura_id)
class Meta:
managed = False
---------------------------
/*ahora es que llegan los errores*/
Sincronizo la base de datos y todo corre bien, en el momento que voy a
adicionar un estudiante, es el primer explote...
----------------------------
Caught an exception while rendering: 'NoneType' object has no
attribute 'label'
----------------------------
Ese problema lo socucioné colocando esto en el admin.py
----------------------------
class EstudianteAdmin(admin.ModelAdmin):
list_display = ('nombre',)
list_filter = ('estudiante_asignatura','estudiante_organizacion')
def formfield_for_manytomany(self, db_field, request, **kwargs):
if db_field.name == 'estudiante_organizacion':
kwargs['widget'] =
widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name
in self.filter_vertical))
if db_field.name == 'estudiante_asignatura':
kwargs['widget'] =
widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name
in self.filter_vertical))
return super(EstudianteAdmin,
self).formfield_for_foreignkey(db_field, request, **kwargs)

search_fields = ('nombre',)
filter_horizontal =
['estudiante_organizacion','estudiante_asignatura',]
fieldsets = [
('Datos Personales', {'fields':
['nombre','estudiante_organizacion','estudiante_asignatura']}),
]
admin.site.register(Estudiante, EstudianteAdmin)
---------------------------
Ahora si viene el error que hasta ahora no tiene solución...
--------------------------
Cannot set values on a ManyToManyField which specifies an intermediary
model. Use EstudianteOrganizacion's Manager instead.
--------------------------
Les agradecería su colaboración...
Para aprovechar el momento, decirles que tengo varios errores que aun
están por resolverse...
Primero: por que si yo cambio un ImageField no me borra el que había
viejo....
Segundo: si utilizo en las plantillas de administración campos creados
por mi mismo para utilizar javascript para mostrar/ocultar o
simplemente cambiar los valores de otro wiget como les digo para que
en los modificar capturen los datos que contiene esa tupla en la base
de datos...les estoy hablando del archivo plantillas/admin/includes/
fieldset.html
salu2 y gracias de antemano
Reply all
Reply to author
Forward
0 new messages