2014-04-09 5 views
6

Es gibt viele Fragen zu dieser Ausnahme:add() für ManyToManyField, die ein Zwischenmodell spezifiziert

AttributeError: Cannot set values on a ManyToManyField which specifies 
an intermediary model. 
Use myapp.MyThroughModel's Manager instead. 

Die docs

Sie können nicht nur eine Beziehung zwischen einer Person erstellen und einer Gruppe - Sie müssen alle Details für die Beziehung angeben, die von das Mitgliedschaftsmodell benötigt wird. Die einfachen Aufrufe zum Hinzufügen, Erstellen und Zuweisen bieten keine Möglichkeit, dieses zusätzliche Detail anzugeben. Daher sind sie für viele-zu-viele-Beziehungen deaktiviert, die ein intermediäres -Modell verwenden.

Aber alle meine Attribute/Spalten von MyThroughModel sind optional. Der Manager könnte sie erstellen.

Wie kann ich einen benutzerdefinierten Manager schreiben, um MyThroughModel-Instanzen automatisch zu erstellen?

Ich brauche eine Lösung auf ORM-Ebene, nicht auf Formularebene.

Antwort

7

fand ich einen Weg django zu sagen, die zusätzlichen Daten zu ignorieren:

class MyThroughModel(Model): 
    class Meta(): 
     auto_created=True 
    ... 

aktualisiert

Dies schafft Probleme mit den django internen Migrationen. Wir haben unseren Code aktualisiert und verwenden auto_created = True nicht mehr.

+0

Für mich bricht diese Lösung Migrationen. makemigrations möchte das Through-Modell mit diesem Optionssatz entfernen. –

+0

@RobinElvin welche Version von Django benutzt du? – guettli

+0

Was machst du jetzt? – Bob

Verwandte Themen