#13815: Excluding isnull=False testing failing on reverse optional relations
------------------------------------------+---------------------------------
 Reporter:  bpeschier                     |       Owner:  nobody    
   Status:  new                           |   Milestone:            
Component:  Database layer (models, ORM)  |     Version:  SVN       
 Keywords:  isnull, reverse relation      |       Stage:  Unreviewed
Has_patch:  0                             |  
------------------------------------------+---------------------------------
 This one is related to #13768.

 When executing {{{<queryset>.exclude(<reverse relation>__isnull=False)}}}
 SQL is generated which can contain NULL-values in a subquery when the
 relation is optional (null=True), always resulting in an empty resultset,
 irregardless of other values in the subquery.

 This is the SQL generated:

 {{{
 class Outer(models.Model):
     name    = models.CharField(max_length=1)

 class Inner(models.Model):
     outer   = models.ForeignKey(Outer, null=True)

 Outer.objects.exclude(inner__isnull=False):

 SELECT "test_outer"."id", "test_outer"."name" FROM "test_outer" WHERE NOT
 (("test_outer"."id" IN (SELECT U1."outer_id" FROM "test_inner" U1 WHERE
 U1."id" IS NOT NULL) AND NOT ("test_outer"."id" IS NULL))) LIMIT 21
 }}}

 The subquery could include a test for the relation-field ({{{U1."outer_id"
 IS NOT NULL}}}) to exclude unusable NULL-values, which will make this
 work. SQL-generation in Django is one of the few areas I am not
 comfortable with, so I have no relation to *where* to fix this.

 I have attached a unittest to check all isnull-tests, just to be sure.

-- 
Ticket URL: <http://code.djangoproject.com/ticket/13815>
Django <http://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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to