Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/03/2013, 14:44
edderleonardo
 
Fecha de Ingreso: enero-2013
Ubicación: Campeche
Mensajes: 3
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Alguien ha usado M2M en Django

Claro por ejemplo tengo estos modelos:

Código Python:
Ver original
  1. class Movimientos(models.Model):
  2.     fecha_registro = models.DateField(null=True, blank=True)
  3.     fecha_solicitante = models.DateField(null=True, blank=True)
  4.     fecha_aceptado = models.DateField(null=True, blank=True)
  5.     class Meta:
  6.         db_table = u'movimientos'
  7.  
  8. class Inscripciones(models.Model):
  9.     matricula = models.CharField(max_length=135, blank=True)
  10.     curp = models.CharField(max_length=135)
  11.     nombres = models.CharField(max_length=300)
  12.     primer_apellido = models.CharField(max_length=300)
  13.     segundo_apellido = models.CharField(max_length=300, blank=True)
  14.     movimientos = models.ForeignKey(Movimientos)
  15.     contacto = models.ForeignKey('Contacto')
  16.     carrera                         = models.ManyToManyField(Carreras)
  17.     carrera.help_text=''
  18.    
  19.     def __unicode__(self):
  20.         return u'%s %s %s' % (self.nombres, self.primer_apellido, self.segundo_apellido)
  21.    
  22.     class Meta:
  23.         db_table = u'inscripciones'
  24.  
  25. class Contacto(models.Model):
  26.     email = models.CharField(max_length=135)
  27.     facebook = models.CharField(max_length=135, blank=True)
  28.     twitter = models.CharField(max_length=135, blank=True)
  29.     class Meta:
  30.         db_table = u'contacto'
  31.  
  32. ya están relacionados, use inspectdb en la base de datos.
  33.  
  34. creo el forms.py conteniendo lo siguiente:
  35.  
  36. from django import forms
  37. from miapp.apps.inscripciones.models import *
  38. from django.utils.safestring import mark_safe # Clase Personalizada
  39. # Checks
  40. class CheckboxSelectMultipleP(forms.CheckboxSelectMultiple):
  41.     def render(self, *args, **kwargs):
  42.         output = super(CheckboxSelectMultipleP, self).render(*args,**kwargs)
  43.         return mark_safe(output.replace(u'<ul>', u'').replace(u'</ul>', u'').replace(u'<li>', u'<p>').replace(u'</li>', u'</p>'))
  44. #
  45.  
  46. class registroForm(forms.ModelForm):
  47.     class Meta:
  48.         model = Inscripciones
  49.        
  50.         widgets = {
  51.             'curp' : forms.TextInput(attrs={'onkeyup':'aMays(event,this)'}),
  52.             'carrera': CheckboxSelectMultipleP(),
  53.          }

creo un vista para guardalo (omiti la parte de los imports)

Código Python:
Ver original
  1. def registro_view(request):
  2.     if request.method == "POST":
  3.         form = registroForm(request.POST)
  4.         info = "Inicializando"
  5.         if form.is_valid():
  6.             form.save()
  7.             info = "Se guardo el registro"
  8.         else:
  9.             info = "Datos incorrectos"
  10.         form = registroForm()
  11.         ctx = {'registroForm': registroForm , 'informacion': info } #
  12.         return render_to_response('registro/index.html', ctx , context_instance=RequestContext(request))
  13.  
  14.     else:
  15.         form = registroForm()
  16.         ctx = {'registroForm': registroForm }
  17.         return render_to_response('registro/index.html', ctx , context_instance=RequestContext(request))
en mi index.html li muestro en un form

Código HTML:
Ver original
  1. <form action="." id= "formulario" method = "POST">
  2.         {% csrf_token %}  
  3.         {{ registroForm.as_p }}
  4.         <input type="submit" value = "Preregistrarme" class="btn btn-primary" >    
  5. </form>
el problema que tengo es que a la hora de mostrar el formulario en el index.html me salen los unas listas desplegables, intente cambiarlo con un widget 'contacto': forms.TextInput(), 'movimiento': forms.TextInput(), pero al momento de llenarlos me dice mi error "Datos icorrectos", como podria guardarlos?

De antemano muchas gracias por tú ayuda.

Última edición por razpeitia; 14/03/2013 a las 00:18