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:
parent
95a5c9b794
commit
bd65e82831
@ -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,
|
||||
|
@ -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(
|
||||
|
Loading…
x
Reference in New Issue
Block a user