django nicht eingestellt Werte auf einem ManyToManyField, die ein Zwischenmodell angibt. Verwenden-Manager statt
Frage
ich arbeite auf das gleiche Formular zwei Tabellen zum Speichern - eine m2m Beziehung hat. Gelingt es mir nicht, mein Fehler weiter besteht mit so etwas wie: Kann nicht Werte auf einem ManyToManyField gesetzt, die ein Zwischenmodell angibt. Verwenden Mitgliedschaft des Verwalters statt wo Mitgliedschaft ist mein ‚durch Tabelle‘.
mein Code:
def save_classroom(request):
classroom_instance = Classroom()
if request.method == 'POST':
form = ClassroomForm(request.POST, request.FILES, user = request.user)
if form.is_valid():
new_obj = form.save(commit=False)
new_obj.user = request.user
new_obj.save()
membership = Membership(member = request.user,classroom=new_obj)
membership.save()
form.save_m2m()
return HttpResponseRedirect('.')
else:
form = ClassroomForm(user = request.user)
return render_to_response('classroom/classroom_form.html', {
'form': form,
},
context_instance=RequestContext(request))
meine Modelle:
class Classroom(models.Model):
user = models.ForeignKey(User, related_name = 'classroom_creator')
classname = models.CharField(max_length=140, unique = True)
date = models.DateTimeField(auto_now=True)
open_class = models.BooleanField(default=True)
members = models.ManyToManyField(User,related_name="list of invited members", through = 'Membership')
class Membership(models.Model):
accept = models.BooleanField(default=False)
date = models.DateTimeField(auto_now = True)
classroom = models.ForeignKey(Classroom, related_name = 'classroom_membership')
member = models.ForeignKey(User, related_name = 'user_membership')
Wo bin ich falsch?
Lösung
Wie zu sehen auf:
http://docs.djangoproject.com/en / dev / Themen / db / models / # intermediärsbasierten ManyToMany
Im Gegensatz zu normalen many-to-many-Feldern, Sie nicht hinzufügen können, erstellen oder Zuweisung (das heißt beatles.members = [...]) Beziehungen zu schaffen
Ich denke, Ihr Code stellt bis auf die Zeile „form.save_m2m ()“, was nicht notwendig ist, da Sie bereits manuell eine Mitgliedschaft erstellen.
Andere Tipps
Wenn Sie class Membership
ändern dürfen, das Hinzufügen auto_created = True
könnte Ihr Problem lösen,
class Membership(models.Model):
class Meta:
auto_created = True
In Django 1.7 wird die Fehlermeldung in „Kann nicht eingestellten Werte auf einem ManyToManyField, die ein Zwischenmodell spezifiziert“. Die Lösung ist das gleiche.
. HINWEIS: Damit entfernen Sie Ihre Zwischenmodell vollständig und alle zusätzlichen Felder mit ihm
Ich hatte eine ähnliche Fehlermeldung auf einem anderen Problem. Ich kann es hier posten für den Fall, es anderen hilft.
Ich habe ein neues ManyToManyField
auf einem vorhandenen Modell hinzugefügt. Dieses Modell wurde in einem ModelForm
gebaut mit einem exclude
Feld verwendet wird.
ich das Problem behoben, indem das neue Feld in den ausgeschlossen denjenigen hinzuzufügen.
Wie der Django 2.2 Release Sie können auch ein through_defaults
angeben auf dem Feld Add, um erstellen und Zuordnung:
Die
RelatedManager.add()
,create()
,remove()
,set()
,get_or_create()
, undupdate_or_create()
Methoden sind nun erlaubt auf many-to-many Beziehungen mit Zwischenmodellen. Die neuethrough_defaults
Argument wird verwendet, um Werte für die neue Zwischenmodell zu spezifizieren Beispiel (s).
In Ihrem Fall, da alle die Felder bereits Standardwerte haben, es könnte nur Arbeit in 2.2.