#14043: Incorrect and/or confusing behaviour with nullable OneToOneField
---------------------------------------------------+------------------------
          Reporter:  theevilgeek                   |         Owner:             
                              
            Status:  new                           |     Milestone:  1.3        
                              
         Component:  Database layer (models, ORM)  |       Version:  SVN        
                              
        Resolution:                                |      Keywords:  
OneToOneField, cascading delete, nullable
             Stage:  Ready for checkin             |     Has_patch:  1          
                              
        Needs_docs:  0                             |   Needs_tests:  0          
                              
Needs_better_patch:  0                             |  
---------------------------------------------------+------------------------
Comment (by ahebert):

 Looks like this is solved here. I'm adding a little more information for
 anyone who is trying to work around this in a pre-1.3 version of Django.
 The following modification fixed a similar problem on my model.


 {{{
 class Person(models.Model):
   age = models.PositiveIntegerField()

   def die(self):
     self.soul.become_ghost()
     # Update self here, so that self.soul is unavailalbe in the object
 passed to delete()
     # If self is left alone, then self.soul points to a python object
 representing a relationship
     # that was deleted from the database in the call to become_ghost().
     self = Person.objects.get(pk=self.pk)
     # OR, the following to work more generally:
     # self = self.__class__.objects.get(pk=self.pk)
     self.delete()


 class Soul(models.Model):
   person = models.OneToOneField(Person, null=True)
   is_alive = models.BooleanField(default=True)

   def become_ghost(self):
     self.person = None
     self.is_alive = False
     self.save()

 }}}

 I'd suggest it as a documentation change for earlier versions, but it's so
 hack-y.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/14043#comment:8>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-upda...@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to