Skip to content

Commit ef61476

Browse files
committed
Support negated filters on one-to-one and many-to-one Relationships
1 parent fac0761 commit ef61476

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

relativity/fields.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -405,12 +405,12 @@ def get_path_info(self, filtered_relation=None):
405405
if django.VERSION < (2, 0):
406406
to_opts = self.rel.to._meta
407407
from_opts = self.model._meta
408-
return [PathInfo(from_opts, to_opts, (to_opts.pk,), self, True, False)]
408+
return [PathInfo(from_opts, to_opts, (to_opts.pk,), self, self.multiple, False)]
409409
to_opts = self.remote_field.model._meta
410410
from_opts = self.model._meta
411411
return [
412412
PathInfo(
413-
from_opts, to_opts, (to_opts.pk,), self, True, False, filtered_relation
413+
from_opts, to_opts, (to_opts.pk,), self, self.multiple, False, filtered_relation
414414
)
415415
]
416416

tests/tests.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,29 @@ def test_single_reverse(self):
364364
self.assertIsNone(node_3.next)
365365
self.assertIsNone(node_1.prev)
366366

367+
def test_many_to_one_exclude_forward(self):
368+
qs = CartItem.objects.exclude(product__colour="red")
369+
370+
self.assertEqual(qs.count(), 1)
371+
372+
def test_single_exclude_forward(self):
373+
node_1 = LinkedNode.objects.create(
374+
name="first node",
375+
prev_id=None,
376+
)
377+
node_2 = LinkedNode.objects.create(
378+
name="next node",
379+
prev_id=node_1.id,
380+
)
381+
node_3 = LinkedNode.objects.create(
382+
name="last node",
383+
prev_id=node_2.id,
384+
)
385+
386+
qs = LinkedNode.objects.exclude(next__name__contains="last")
387+
388+
self.assertEqual(qs.count(), 2)
389+
367390
def test_not_nullable(self):
368391
item = CartItem.objects.create(
369392
pk=4,

0 commit comments

Comments
 (0)