Ich habe eine M2M-Beziehung zwischen zwei Modellen, die ein Zwischenmodell verwenden. Aus Gründen der Diskussion, lassen Sie uns das Beispiel aus dem Handbuch verwenden:Klassenbasierte Ansichten für die M2M-Beziehung mit dem Intermediate-Modell
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)
Ich möchte Verwendung von Djangos klassenbasierte Ansichten machen, schreiben CRUD-Handling Ansichten zu vermeiden. Allerdings, wenn ich versuche, das Standard-Create zu verwenden, funktioniert es nicht:
class GroupCreate(CreateView):
model=Group
Dies macht ein Formular mit allen Feldern auf dem Gruppenobjekt, und gibt ein Mehrfachauswahlfeld für die Mitglieder Feld, was wäre richtig für eine einfache M2M-Beziehung. Es gibt jedoch keine Möglichkeit, date_joined oder invite_reason anzugeben, und das Übermitteln des Formulars gibt das folgende AttributeError:
"Kann Werte auf einem ManyToManyField nicht festlegen, das ein intermediäres Modell angibt. Verwenden Sie stattdessen Membership Manager."
Gibt es eine gute Möglichkeit, einen Teil des generischen CreateView zu überschreiben oder meine eigene benutzerdefinierte Ansicht zu erstellen, um dies mit Mixins zu tun? Es fühlt sich an, als sollte dies Teil des Frameworks sein, da das Admin-Interface automatisch M2M-Beziehungen mit Intermediates behandelt, die Inlines verwenden.
mögliches Duplikat von [django Kann keine Werte für ein ManyToManyField festlegen, das ein intermediäres Modell angibt. Benutze stattdessen Manager] (http://stackoverflow.com/questions/3091328/django-cannot-set-values-on-a-manytomanyfield-which-specifies-an-intermediary-mo) – juliocesar