Ho una relazione M2M tra due modelli che utilizza un modello intermedio. Per il bene della discussione, usiamo l'esempio da manuale:Visualizzazioni basate su classi per la relazione M2M con il modello 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)
mi piacerebbe fare uso di punti di vista basati su Class di Django, di evitare di scrivere viste CRUD di gestione. Tuttavia, se si tenta di utilizzare il CreateView di default, non funziona:
class GroupCreate(CreateView):
model=Group
Questo rende un modulo con tutti i campi sull'oggetto Gruppo, e dà una scatola di selezione multipla per il campo i membri, che sarebbe corretto per una semplice relazione M2M. Tuttavia, non è possibile specificare date_joined o invite_reason e l'invio del modulo restituisce il seguente AttributeError:
"Impossibile impostare valori su un ManyToManyField che specifica un modello intermedio. Utilizzare invece Gestione membri."
C'è un modo semplice per scavalcare parte del generico CreateView, o comporre la mia vista personalizzata per farlo con mixin? Sembra che questo dovrebbe essere parte del framework, in quanto l'interfaccia di amministrazione gestisce in modo atomico le relazioni M2M con i prodotti intermedi utilizzando inline.
possibile duplicato di [django Impossibile impostare valori su un ManyToManyField che specifica un modello intermedio. Utilizzare Gestione invece] (http://stackoverflow.com/questions/3091328/django-cannot-set-values-on-a-manytomanyfield-which-specifies-an-intermediary-mo) – juliocesar