Domanda

Secondo un esempio , ho tre modelli:

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

L'aggiunta di membri funziona. Ma come posso eliminare una singola istanza di appartenenza (un utente abbandona un gruppo), senza eliminare né l'utente né il gruppo?

Quando provo a eliminarlo in questo modo:

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

Ricevo un errore:

  

AssertionError su / groups / quit / 1 /

     

L'oggetto appartenenza non può essere eliminato perché l'attributo id è impostato su   Nessuno.

È stato utile?

Soluzione

Nella linea

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

Hai creato un nuovo Iscrizione che non hai recuperato dal database. Ecco perché il suo attributo id è impostato su Nessuno.

Forse intendevi

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

Altri suggerimenti

Questo particolare errore è innescato dal fatto che la tua m istanza della classe appartenenza non è salvata, quindi la sua chiave primaria è None. Apparentemente, è impossibile eliminare un'istanza del genere non salvata (il che ha senso, perché non c'è nulla da "cancellare").

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