MCPcopy
hub / github.com/django/django / test_ambiguous

Method test_ambiguous

tests/prefetch_related/tests.py:607–653  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

605 self.assertEqual(related_objs_normal, (related_objs_from_traverse,))
606
607 def test_ambiguous(self):
608 # Ambiguous: Lookup was already seen with a different queryset.
609 msg = (
610 "'houses' lookup was already seen with a different queryset. You "
611 "may need to adjust the ordering of your lookups."
612 )
613 # lookup.queryset shouldn't be evaluated.
614 with self.assertNumQueries(3):
615 with self.assertRaisesMessage(ValueError, msg):
616 self.traverse_qs(
617 Person.objects.prefetch_related(
618 "houses__rooms",
619 Prefetch("houses", queryset=House.objects.all()),
620 ),
621 [["houses", "rooms"]],
622 )
623
624 # Ambiguous: Lookup houses_lst doesn't yet exist when performing
625 # houses_lst__rooms.
626 msg = (
627 "Cannot find 'houses_lst' on Person object, 'houses_lst__rooms' is "
628 "an invalid parameter to prefetch_related()"
629 )
630 with self.assertRaisesMessage(AttributeError, msg):
631 self.traverse_qs(
632 Person.objects.prefetch_related(
633 "houses_lst__rooms",
634 Prefetch(
635 "houses", queryset=House.objects.all(), to_attr="houses_lst"
636 ),
637 ),
638 [["houses", "rooms"]],
639 )
640
641 # Not ambiguous.
642 self.traverse_qs(
643 Person.objects.prefetch_related("houses__rooms", "houses"),
644 [["houses", "rooms"]],
645 )
646
647 self.traverse_qs(
648 Person.objects.prefetch_related(
649 "houses__rooms",
650 Prefetch("houses", queryset=House.objects.all(), to_attr="houses_lst"),
651 ),
652 [["houses", "rooms"]],
653 )
654
655 def test_m2m(self):
656 # Control lookups.

Callers

nothing calls this directly

Calls 6

traverse_qsMethod · 0.95
PrefetchClass · 0.90
assertNumQueriesMethod · 0.80
assertRaisesMessageMethod · 0.80
prefetch_relatedMethod · 0.45
allMethod · 0.45

Tested by

no test coverage detected