¿Cómo elimino una instancia de un modelo intermedio en una relación de muchos a muchos de Django?

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

Pregunta

De acuerdo con una ejemplo , tengo tres modelos:

class User(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(User, through='Membership')

class Membership(models.Model):
    person = models.ForeignKey(User)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()

Agregar miembros funciona. Pero, ¿cómo elimino una sola instancia de Membresía? (un usuario sale de un grupo), sin eliminar ni el usuario ni el grupo?

Cuando intento eliminarlo así:

    u = User(request.user)
    g = Group.objects.get(id=group_id, membership__user=u)
    m = Membership(user=request.user, group=g)
    m.delete()

Me sale un error:

  

AssertionError en / groups / quit / 1 /

     

El objeto de membresía no se puede eliminar porque su atributo id está establecido en   Ninguno.

¿Fue útil?

Solución

En la línea

m = Membership(user=request.user, group=g)

Creó una nueva Membresía que no obtuvo una de la base de datos. Es por eso que su atributo id está establecido en Ninguno.

Quizás quisiste decir

m = Membership.objects.get(user=request.user, group=g)

Otros consejos

Este error particular se desencadena por el hecho de que su instancia de m de la clase Membership no se ha guardado, por lo que su clave principal es None. Aparentemente, es imposible eliminar una instancia no guardada (lo cual tiene sentido, porque no hay nada que "eliminar").

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top