django non può impostare i valori su un ManyToManyField che specifica un modello di intermediazione. Utilizzare Gestione invece

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

  •  29-09-2019
  •  | 
  •  

Domanda

sto lavorando sul risparmio sullo stesso modulo di due tavoli - avere una relazione m2m. Non riesco, i miei persiste errore con qualcosa di simile: non è possibile impostare i valori su un ManyToManyField che specifica un modello di intermediazione. Responsabile di utilizzare l'appartenenza al posto in cui l'appartenenza è il mio 'attraverso la tabella'.

il mio codice:

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))  

I miei modelli:

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')

dove sbaglio?

È stato utile?

Soluzione

Come visto su:

http://docs.djangoproject.com/en / dev / argomenti / db / modelli / # intermediario-ManyToMany

  

A differenza dei normali molti-a-molti campi, non è possibile utilizzare add, creare, o l'assegnazione (vale a dire, beatles.members = [...]) per creare rapporti

Credo che il codice di viaggi sulla linea "form.save_m2m ()", che è inutile dal momento che già creare manualmente un abbonamento.

Altri suggerimenti

Se si è permesso di modificare class Membership, aggiungendo auto_created = True potrebbe risolvere il tuo problema,

class Membership(models.Model): 
    class Meta:
        auto_created = True

In Django 1.7, il messaggio di errore viene cambiato in "valori non può impostare su un ManyToManyField che specifica un modello di intermediazione". La soluzione è la stessa.

. NOTA: Questo eliminerà il vostro modello intermedio del tutto, e tutti i campi aggiuntivi con esso

Ho avuto un messaggio di errore simile su un problema diverso. I post qui solo nel caso in cui aiuta gli altri.

Ho una nuova ManyToManyField su un modello esistente. Questo modello è stato utilizzato in un ModelForm costruita con un campo exclude.

I risolto il problema aggiungere il nuovo campo in quelli esclusi.

Django 2.2 rilascio è anche possibile specificare un through_defaults sul campo, al fine di utilizzare add, creare e assegnazione:

  

Il RelatedManager.add(), create(), remove(), set(), get_or_create(),   e metodi update_or_create() sono ora autorizzati a molti-a-molti   rapporti con i modelli intermedi. Il nuovo through_defaults   argomento viene utilizzato per specificare i valori per il nuovo modello intermedio   esempio (s).

Nel tuo caso dal momento che tutti i campi hanno già valori di default potrebbe essere solo il lavoro in 2.2.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top