Ich finde heraus, dass delete()
eines verwandten Objekts löscht es nicht sofort. In meinem Fall kommt die Vader
Instanz durch instance
Parameter eines Serializers update
Methode.Wie Eigenschaft entfernen Objekte (sofort)
Wie lösche ich sofort v.son
?
class Vader(models.Model):
pass
class Luke(models.Model):
dad = models.OneToOneField(Vader, related_name='son')
>>> v = Vader()
>>> hasattr(v, 'son')
False
>>> l = Luke(dad=v)
>>> l.save()
>>> hasattr(v, 'son')
True
>>> v.son
<Luke: Luke object>
>>> v.son.delete()
>>> hasattr(v, 'son')
True
>>> v.son
<Luke: Luke object>
Dies funktionierte nicht. Ich musste 'v = Vader.objects.get (id = v.id)' machen. Ich frage mich, ob das etwas mit der 'OneToOne'-Beziehung zu tun hat? Ein 'refresh_from_db()' hat nur die 'Vader' Tabelle abgefragt, während' .get() 'auch alle 'OneToOne' bezogenen Tabellen abgefragt hat. –
Nur hinzufügen, nach dem '.delete()' das 'v.son' ist weiterhin ein' Luke' Objekt, nur seine 'id' ist None. Dies blieb auch nach '.refresh_from_db()' –
Ich habe meinen Scheck auf 'hasattr (v, 'son') und v.son.id' erweitert. Dort findet keine Datenbankabfrage mit diesem. –