through many intermediate form foreign django forms m2m

intermediate - manytomanyfield django through



django No se pueden establecer valores en un ManyToManyField que especifica un modelo intermediario. Usa el Administrador en su lugar (4)

A partir de la versión Django 2.2 , también puede especificar un through_defaults en el campo para usar agregar, crear y asignar:

Los RelatedManager.add() , create() , remove() , set() , get_or_create() y update_or_create() ahora están permitidos en relaciones de muchos a muchos con modelos intermedios. El nuevo argumento through_defaults se usa para especificar valores para las nuevas instancias del modelo intermedio.

En su caso, dado que todos los campos ya tienen valores predeterminados, podría funcionar en 2.2.

Estoy trabajando para guardar en la misma forma dos tablas: tener una relación de m2m. No tengo éxito, mi error persiste con algo como: No se pueden establecer valores en un campo ManyToManyField que especifica un modelo intermediario. Utilice el Administrador de membresía en lugar de donde la Membresía es mi ''a través de la tabla''.

mi código :

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

mis modelos:

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

donde me equivoco



Si se le permite modificar class Membership , agregar auto_created = True podría resolver su problema,

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

En Django 1.7, el mensaje de error se cambia a "No se pueden establecer valores en un campo ManyToManyField que especifica un modelo intermediario". La solución es la misma.

NOTA: Esto eliminará completamente su modelo intermedio y todos los campos adicionales con él.


Tuve un mensaje de error similar en un problema diferente. Lo publico aquí por si acaso ayuda a otros.

He agregado un nuevo ManyToManyField en un modelo existente. Este modelo se usó en un ModelForm construido con un campo de exclude .

Arreglo el problema agregando el nuevo campo en los excluidos.