Tengo una relación M2M entre dos modelos que usa un modelo intermedio. Por el bien de la discusión, vamos a utilizar el ejemplo del manual:Vistas basadas en clases para la relación M2M con el modelo intermedio
class Person(models.Model):
name = models.CharField(max_length=128)
def __unicode__(self):
return self.name
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
def __unicode__(self):
return self.name
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
me gustaría hacer uso de puntos de vista basados en la clase de Django, para evitar escribir vistas CRUD-manipulación. Sin embargo, si trato de utilizar el CreateView defecto, que no funciona:
class GroupCreate(CreateView):
model=Group
Esto hace que un formulario con todos los campos en el objeto de grupo, y le da una caja de selección múltiple para el campo de los miembros, lo cual sería correcto para una simple relación M2M. Sin embargo, no hay forma de especificar la fecha_unidada o el motivo_invitado, y al enviar el formulario se obtiene el siguiente AttributeError:
"No se pueden establecer valores en ManyToManyField que especifique un modelo intermediario. En su lugar, use el Administrador de Membresía".
¿Existe alguna manera de sobrescribir parte del CreateView genérico o redactar mi propia vista personalizada para hacer esto con mixins? Parece que esto debería ser parte del marco, ya que la interfaz de administración maneja las relaciones M2M con intermedios utilizando inlines.
posible duplicado de [django No se pueden establecer valores en ManyToManyField que especifica un modelo intermediario. Use Manager en su lugar] (http://stackoverflow.com/questions/3091328/django-cannot-set-values-on-a-manytomanyfield-which-specifies-an-intermediary-mo) – juliocesar