• 
      

    Normalize QuerySets in subqueries.

    Review Request #14756 — Created Dec. 31, 2025 and submitted

    Information

    django-assert-queries
    main

    Reviewers

    When a subquery includes a QuerySet, it's impossible to match, because
    even though the surrounding Q object attempts to check equality,
    QuerySet equality is strictly based on identity.

    This change adds a check to see if the value in the Q object is a
    QuerySet, and replace it with a subquery placeholder. This changes the
    processed WHERE clause from Q(group__in=<QuerySet []>) to
    Q(group__in=('__QuerySet__subquery__', 1)), which can be included in
    the expected result.

    • Ran unit tests.
    • Used in Review Board tests that (under Django 5.2) are including a
      QuerySet in the WHERE clause.
    Summary ID
    Normalize QuerySets in subqueries.
    When a subquery includes a `QuerySet`, it's impossible to match, because even though the surrounding `Q` object attempts to check equality, `QuerySet` equality is strictly based on identity. This change adds a check to see if the value in the Q object is a QuerySet, and replace it with a subquery placeholder. This changes the processed `WHERE` clause from `Q(group__in=<QuerySet []>)` to `Q(group__in=('__QuerySet__subquery__', 1))`, which can be included in the expected result. Testing Done: - Ran unit tests. - Used in Review Board tests that (under Django 5.2) are including a `QuerySet` in the `WHERE` clause.
    ozrkwprlkqkmzplxwvvzwpxprrxzrypo
    chipx86
    1. Ship It!
    2. 
        
    david
    Review request changed
    Status:
    Completed