#33225: Missing FROM-clause when ordering by a relationship defined on the 
parent
model in a Subquery inside a negated Q
-------------------------------------+-------------------------------------
               Reporter:             |          Owner:  nobody
  InvalidInterrupt                   |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  dev
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 I encountered the following error in 3.2, and produced this test case
 against main (`551c997f`) today; using the postgres backend for all tests.

 Using the models from `tests.model_inheritance_regress.models`, when
 running:
 {{{
 list(
     ItalianRestaurant.objects.filter(
         ~Q(
             supplier__pk__in=Subquery(
                 ItalianRestaurant.objects.filter(pk=OuterRef('pk'))
                 .order_by('serves_gnocchi')
                 .values('pk')
             )
         )
     )
 )
 }}}
 ProgrammingError is raised, due to a missing JOIN of
 `model_inheritance_regress_restaurant`.

 This is as much as I was able to reduce the test case. In particular, the
 following seem necessary to encounter the error:
 * The negation of the Q object
 * The `__in` lookup passing through a relationship defined on the parent
 model
 * The `filter()` on an `OuterRef`
 * The use of `order_by()`

 The error also occurs if `values('supplier__pk')` is used as would be
 semantically correct.


 When debugging, it appeared that the inner `Query` object had a refcount
 of zero for the alias in question, but I may have misunderstood what was
 happening there.

-- 
Ticket URL: <https://code.djangoproject.com/ticket/33225>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/059.9f5a861930c6166d7a5531cab6a8bfc2%40djangoproject.com.

Reply via email to