django non può impostare i valori su un ManyToManyField che specifica un modello di intermediazione. Utilizzare Gestione invece
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?
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 metodiupdate_or_create()
sono ora autorizzati a molti-a-molti rapporti con i modelli intermedi. Il nuovothrough_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.