Skip to content

Commit 71a22ae

Browse files
committed
Don't raise an exception when accessing a Relationship where null=True
1 parent 76323ab commit 71a22ae

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

relativity/fields.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,14 @@ def related_manager_cls(self):
281281

282282

283283
class SingleRelationshipDescriptor(ReverseOneToOneDescriptor):
284-
pass
284+
def __get__(self, instance, cls=None):
285+
try:
286+
return super(SingleRelationshipDescriptor, self).__get__(instance, cls=None)
287+
except self.RelatedObjectDoesNotExist:
288+
if self.related.null:
289+
return None
290+
else:
291+
raise
285292

286293

287294
# noinspection PyProtectedMember

tests/models.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,11 @@ class CartItem(models.Model):
139139
description = models.TextField()
140140

141141
product = Relationship(
142-
Product, Q(sku=L("product_code")), related_name="cart_items", multiple=False
142+
Product,
143+
Q(sku=L("product_code")),
144+
related_name="cart_items",
145+
multiple=False,
146+
null=False,
143147
)
144148

145149
def __str__(self):

tests/tests.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,18 @@ def test_single_reverse(self):
356356
self.assertEqual(node_3.prev, node_2)
357357
self.assertEqual(node_1.next, node_2)
358358

359+
self.assertIsNone(node_3.next)
360+
self.assertIsNone(node_1.prev)
361+
362+
def test_not_nullable(self):
363+
item = CartItem.objects.create(
364+
pk=4,
365+
product_code="nonexistent",
366+
description="cart item for anonexistent product",
367+
)
368+
with self.assertRaises(Product.DoesNotExist):
369+
item.product
370+
359371
def test_complex_expression(self):
360372
ug = UserGenerator.objects.create()
361373
self.assertEqual(ug.user, User.objects.get(username="generated_for_%d" % ug.id))

0 commit comments

Comments
 (0)