Index: django/db/models/fields/related.py
===================================================================
--- django/db/models/fields/related.py	(revision 9814)
+++ django/db/models/fields/related.py	(working copy)
@@ -185,7 +185,13 @@
             return getattr(instance, self.cache_name)
         except AttributeError:
             params = {'%s__pk' % self.related.field.name: instance._get_pk_val()}
-            rel_obj = self.related.model._default_manager.get(**params)
+            try:
+                rel_obj = self.related.model._default_manager.get(**params)
+            except self.related.model.DoesNotExist:
+                if self.related.field.null:
+                    rel_obj = None
+                else:
+                    raise
             setattr(instance, self.cache_name, rel_obj)
             return rel_obj
 
Index: tests/modeltests/one_to_one_null/__init__.py
===================================================================
--- tests/modeltests/one_to_one_null/__init__.py	(revision 0)
+++ tests/modeltests/one_to_one_null/__init__.py	(revision 0)
@@ -0,0 +1 @@
+

Property changes on: tests/modeltests/one_to_one_null/__init__.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native

Index: tests/modeltests/one_to_one_null/models.py
===================================================================
--- tests/modeltests/one_to_one_null/models.py	(revision 0)
+++ tests/modeltests/one_to_one_null/models.py	(revision 0)
@@ -0,0 +1,52 @@
+"""
+14. One-to-one relationships that can be null.
+
+To define a one-to-one relationship, use ``OneToOneField()`` with null=True.
+
+In this example, a ``Shop`` can optionally have a ``Place``. 
+E.g. webshops need not have a place, so it can be None/null.
+"""
+
+from django.db import models
+
+class Place(models.Model):
+    name = models.CharField(max_length=50)
+    address = models.CharField(max_length=80)
+
+    def __unicode__(self):
+        return u"%s the place" % self.name
+
+class Shop(models.Model):
+    place = models.OneToOneField(Place, null=True)
+    name = models.CharField(max_length=50)
+    website = models.URLField()
+    
+    def __unicode__(self):
+        return u"%s the shop" % self.name
+
+__test__ = {'API_TESTS':"""
+# Create a place
+>>> p1 = Place(name='Shop.com retail point', address='101 Somestr')
+>>> p1.save()
+
+>>> print p1.shop
+None
+
+>>> s1 = Shop(name='Shop', website='shop.com')
+>>> s1.save()
+>>> print s1.place
+None
+
+>>> s1.place = p1
+>>> s1.save()
+
+>>> s1.place
+<Place: Shop.com retail point the place>
+ 
+# update p1 to reflect the new relation
+>>> p1 = Place.objects.get(pk=p1.pk)
+>>> p1.shop
+<Shop: Shop the shop>
+
+
+"""}

Property changes on: tests/modeltests/one_to_one_null/models.py
___________________________________________________________________
Added: svn:keywords
   + Id
Added: svn:eol-style
   + native


