#10227: OneToOne fields with null=True raise DoesNotExist exception on related
model
---------------------------------------------+------------------------------
 Reporter:  rvdrijst                         |       Owner:  nobody    
   Status:  new                              |   Milestone:  post-1.0  
Component:  Database layer (models, ORM)     |     Version:  1.0       
 Keywords:  onetoone related expection null  |       Stage:  Unreviewed
Has_patch:  1                                |  
---------------------------------------------+------------------------------
 Referencing a {{{OneToOneField}}} with {{{null=True}}} (i.e. it's
 optional) when there is no value set will return {{{None}}}, as expected.
 However, referencing the reverse side of the relation does not follow this
 behavior and raises a {{{DoesNotExist}}} exception.

 For example, in the following situation where {{{Shop}}}s have optionally
 a {{{Place}}} (e.g. webshops need not have a physical location):
 {{{
 class Place(models.Model)
     address = models.CharField(max_length=80)
 class Shop(models.Model)
     place = models.OneToOneField(Place, null=True)
     name = models.CharField(max_length=50)
     website = models.URLField()
 }}}
 This ''does'' work as expected:
 {{{
 >>> s1 = Shop.objects.create(name='Shop', website='shop.com')
 >>> print s1.place
 None
 }}}
 But this ''doesn't'' work as expected:
 {{{
 >>> p1 = Place.objects.create(address='123 somestr')
 >>> p1.shop
 ... [exception stack trace] ...
 DoesNotExist: Shop matching query does not exist.
 }}}
 I would expect this to be {{{None}}} when {{{null}}} is allowed on the
 {{{OneToOneField}}}.

 Please correct my if I'm wrong.

 I have attached a patch to fix this (checking if {{{null}}} is allowed and
 returning {{{None}}} or raising the exception appropriately), including
 tests.

 Unfortunately this is slightly backwards incompatible, since someone may
 currently rely on the exception being thrown.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/10227>
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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to