#10723: ORM exclute strange
------------------------------------------+---------------------------------
 Reporter:  anonymous                     |       Owner:  nobody    
   Status:  new                           |   Milestone:            
Component:  Database layer (models, ORM)  |     Version:  SVN       
 Keywords:                                |       Stage:  Unreviewed
Has_patch:  0                             |  
------------------------------------------+---------------------------------
 My models is:
 {{{
 class Type(models.Model):
     id = models.AutoField(primary_key=True)
     slug = models.SlugField(unique=True, max_length=10)
     title = models.CharField(max_length=20)
     weight = models.SmallIntegerField(default=0, db_index=True)

 class Active(models.Model):
     post = models.ForeignKey(Post, related_name='activeposts')
     rubrica = models.ForeignKey(Rubrica, related_name='activeposts')
     type = models.ForeignKey(Type, related_name='activeposts')
     user_id = models.PositiveIntegerField()
     pub_date = models.DateTimeField(default=datetime.now)
 }}}


 {{{
 Type.objects.filter(Q(activeposts__rubrica__pk=112) &
 
Q(activeposts__user_id__in=[1,2,3])).annotate(count=Count('activeposts')).query.as_sql()
 }}}

 Result is correct:

 {{{
 ('SELECT `doska_type`.`id`, `doska_type`.`slug`, `doska_type`.`weight`,
 COUNT(`doska_active_new`.`id`) AS `count` FROM `doska_type` LEFT OUTER
 JOIN `doska_active_new` ON (`doska_type`.`id` =
 `doska_active_new`.`type_id`) WHERE (`doska_active_new`.`rubrica_id` = %s
 AND `doska_active_new`.`user_id` IN (%s, %s, %s)) GROUP BY
 `doska_type`.`id` ORDER BY `doska_type`.`weight` ASC', (112, 1, 2, 3))
 }}}
 But
 {{{
 Type.objects.filter(Q(activeposts__rubrica__pk=112) &
 
~Q(activeposts__user_id__in=[1,2,3])).annotate(count=Count('activeposts')).query.as_sql()
 }}}

 Result is not correct:

 {{{
 ('SELECT `doska_type`.`id`, `doska_type`.`slug`, `doska_type`.`weight`,
 COUNT(`doska_active_new`.`id`) AS `count` FROM `doska_type` LEFT OUTER
 JOIN `doska_active_new` ON (`doska_type`.`id` =
 `doska_active_new`.`type_id`) WHERE (`doska_active_new`.`rubrica_id` = %s
 AND NOT (`doska_type`.`id` IN (SELECT U1.`type_id` FROM `doska_active_new`
 U1 WHERE U1.`user_id` IN (%s, %s, %s)))) GROUP BY `doska_type`.`id` ORDER
 BY `doska_type`.`weight` ASC', (112, 1, 2, 3))
 }}}

-- 
Ticket URL: <http://code.djangoproject.com/ticket/10723>
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