1
0
mirror of https://github.com/django/django.git synced 2025-06-15 08:29:11 +00:00

Fixed #36442 -- Cloned FilteredRelation before rename_prefix_from_q.

This commit is contained in:
viliam mihalik 2025-06-05 23:53:01 +02:00 committed by Sarah Boyce
parent 95a5c9b794
commit bd65e82831
2 changed files with 23 additions and 0 deletions

View File

@ -1723,6 +1723,7 @@ class Query(BaseExpression):
"relations deeper than the relation_name (got %r for "
"%r)." % (lookup, filtered_relation.relation_name)
)
filtered_relation = filtered_relation.clone()
filtered_relation.condition = rename_prefix_from_q(
filtered_relation.relation_name,
alias,

View File

@ -604,6 +604,28 @@ class FilteredRelationTests(TestCase):
qs.filter(my_readers=borrower).values_list("name", flat=True), ["Alice"]
)
def test_reuse_same_filtered_relation(self):
borrower = Borrower.objects.create(name="Jenny")
Reservation.objects.create(
borrower=borrower,
book=self.book1,
state=Reservation.STOPPED,
)
condition = Q(book__reservation__state=Reservation.STOPPED)
my_reserved_books = FilteredRelation("book__reservation", condition=condition)
first_query = list(
Author.objects.annotate(
my_reserved_books=my_reserved_books,
)
)
self.assertEqual(my_reserved_books.condition, condition)
second_query = list(
Author.objects.annotate(
my_reserved_books=my_reserved_books,
)
)
self.assertEqual(first_query, second_query)
def test_deep_nested_foreign_key(self):
qs = (
Book.objects.annotate(