Frage

Nach einem Beispiel , ich habe drei Modelle:

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

Hinzufügen von Mitgliedern funktionieren. Aber wie lösche ich eine einzelne Mitgliedschaft-Instanz (A Benutzer verlässt eine Gruppe), ohne sie zu löschen weder der Benutzer noch die Gruppe?

Wenn ich versuche, es so zu löschen:

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

Ich erhalte eine Fehlermeldung:

  

AssertionError bei / Gruppen / quit / 1 /

     

Die Mitgliedschaft Objekt kann nicht gelöscht werden, da sein id-Attribut gesetzt ist   Keine.

War es hilfreich?

Lösung

In der Zeile

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

Sie haben ein neues Membership Sie nicht einer aus der Datenbank holen war. Deshalb ist sein id-Attribut auf None gesetzt ist.

Vielleicht bedeuten Du

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

Andere Tipps

Dieser spezielle Fehler wird durch die Tatsache ausgelöst, dass Ihre m Instanz der Klasse Membership nicht gespeichert ist, so dass ihr Primärschlüssel Keine ist. Offenbar ist es nicht möglich, eine solche nicht gespeicherte Instanz zu löschen (was Sinn macht, weil es nichts zu „löschen“).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top