tengo estos modelos:
CURSES=(('python','Python'),('django','Django'),...) class Asig(models.Model): ... name = models.CharField(max_length=100, choices=CURSES) class Profesor(AbstractUser): ... asigs = models.ManyToManyField(Asig)Luego, cuando renderizo el formulario usando ModelForm, el campo de muchos a muchos se muestra con la cadena 'python' en lugar de 'Python', también, cuando miro el html codificado, las opciones de selección múltiple se ven así:
<option value='1'>python</option>en vez de
<option value='python'>Python</option>Si desea usar el valor 'Python' en el método __str__ del modelo, entonces debe usar self.get_name_display() en lugar de self.name :
class Asig(models.Model): ... name = models.CharField(max_length=100, choices=CURSES) def __str__(self): # use @python_2_unicode_compatible or define __unicode__ if using Python 2 return self.get_name_display() No puede cambiar fácilmente el campo de muchos a muchos para usar value='python' en lugar de value='1' (la clave principal). Así es como funcionan los campos de muchos a muchos.