#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
-~----------~----~----~----~------~----~------~--~---