2016-08-15 4 views
1

Ich habe die folgende einfache Beziehung:Warum löscht Django keine 1: 1-Beziehung?

class User(models.Model): 
    fields here 

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 

ich folgendes in der Schale hat:

user = User.objects.create(...) 
profile = UserProfile.objects.create(user=user) 
user.userprofile 
...<UserProfile: UserProfile object> 
user.userprofile.delete() 
...(1, {'accounts.UserProfile': 1}) 
user.userprofile 
...<UserProfile: UserProfile object> 

Von oben können Sie sehen, dass ich User und Userprofile Instanzen erstellen. Dann versuche ich die UserProfile-Instanz zu löschen und sie wird gelöscht (zumindest scheint es so). Als ich user.userprofile und es ist wie es nie gelöscht wurde.

Nach ein wenig graben in die Django-Lösch-Methode, erkannte ich, dass, wenn ich tun user.userprofile.delete() Django löscht nur Userprofile pk und die Ruhe Felder sind nicht berührt. Was ich nicht verstehe ist, was soll ich tun, um das folgende Ergebnis zu erhalten:

user.userprofile.delete() 
user.userprofile 
...RelatedObjectDoesNotExist: User has no userprofile. 

Hat jemand ein paar Ideen oder Code-Schnipsel?

Antwort

3

Sie können die Benutzer aus der Datenbank neu zu laden:

user = User.objects.get(pk=user.pk) 

, dass alle Attribute einschließlich dem Benutzerprofil neu geladen.