django nicht eingestellt Werte auf einem ManyToManyField, die ein Zwischenmodell angibt. Verwenden-Manager statt

StackOverflow https://stackoverflow.com/questions/3091328

  •  29-09-2019
  •  | 
  •  

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?

War es hilfreich?

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(),   und update_or_create() Methoden sind nun erlaubt auf many-to-many   Beziehungen mit Zwischenmodellen. Die neue through_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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top