mirror of
https://github.com/django/django.git
synced 2025-06-17 01:19:12 +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 "
|
"relations deeper than the relation_name (got %r for "
|
||||||
"%r)." % (lookup, filtered_relation.relation_name)
|
"%r)." % (lookup, filtered_relation.relation_name)
|
||||||
)
|
)
|
||||||
|
filtered_relation = filtered_relation.clone()
|
||||||
filtered_relation.condition = rename_prefix_from_q(
|
filtered_relation.condition = rename_prefix_from_q(
|
||||||
filtered_relation.relation_name,
|
filtered_relation.relation_name,
|
||||||
alias,
|
alias,
|
||||||
|
@ -604,6 +604,28 @@ class FilteredRelationTests(TestCase):
|
|||||||
qs.filter(my_readers=borrower).values_list("name", flat=True), ["Alice"]
|
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):
|
def test_deep_nested_foreign_key(self):
|
||||||
qs = (
|
qs = (
|
||||||
Book.objects.annotate(
|
Book.objects.annotate(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user