Opened 10 years ago
Last modified 10 years ago
#23605 closed Bug
ORM neglects to use aliases it has set up when certain multiple subqueries are used — at Version 2
Reported by: | ris | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | 1.7 |
Severity: | Normal | Keywords: | orm subquery alias |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Using django git 9d7a4ea20510a2e35fdeac21d67f3f4c17634c25
Example models.py:
from django.db import models class ModelA ( models.Model ): pass class ModelB ( models.Model ): modela_fk = models.ForeignKey ( ModelA ) modelc_fk = models.ForeignKey ( "ModelC" ) field_b0 = models.IntegerField ( null = True ) field_b1 = models.BooleanField () class ModelC ( models.Model ): field_c0 = models.FloatField ()
Given the following query (yes, totally redundant subclauses noted):
ModelA.objects.filter ( Q ( pk__in = ModelA.objects.filter ( Q ( modelb__field_b0__gte = 1000000 / F ( "modelb__modelc_fk__field_c0" ) ) & Q ( modelb__field_b1__exact = True ) & ~Q ( modelb__pk__in = ModelB.objects.filter ( ~( Q ( field_b1__exact = True ) & Q ( field_b0__gte = 1000000 / F ( "modelc_fk__field_c0" ) ) ) ) ) ).filter ( modelb__field_b1__exact = True ) ) )
Used against postgres 9.1 generates the error:
ProgrammingError: invalid reference to FROM-clause entry for table "dummy_modelb" LINE 1: ...") AND U0."field_b0" IS NOT NULL)) AND V1."id" = ("dummy_mod... ^ HINT: Perhaps you meant to reference the table alias "v1".
Change History (2)
comment:1 by , 10 years ago
comment:2 by , 10 years ago
Description: | modified (diff) |
---|
Note:
See TracTickets
for help on using tickets.
Did it work in older versions of Django? If so, could you bisect to the commit in Django where things broke?