That is expected behavior. The filter should be read as “there is a child with flag1 equals true”. Another example where this is the desired behavior would be Band.objects.filter(member__name='John', member__name='Paul', member__name='George', member__name='Ringo') . In this case you are looking for a band with at least four different members.
On Sep 6, 2011, at 5:09 PM, dvd wrote: > A clean project/app in django 1.3 with just two models > > from django.db import models > > class Base(models.Model): > pass > > class Child(models.Model): > base = models.ForeignKey(Base) > flag1 = models.BooleanField() > flag2 = models.BooleanField() > > A Queryset with a single use of `.filter` works as expected: >>>> qs = Base.objects.filter(child__flag1=True) >>>> print qs.query > SELECT "t0_base"."id" > FROM "t0_base" INNER JOIN "t0_child" > ON ("t0_base"."id" = "t0_child"."base_id") > WHERE "t0_child"."flag1" = True > > but if I start to add additional filters... >>>> qs = qs.filter(child__flag2=True) >>>> print qs.query > SELECT "t0_base"."id" > FROM "t0_base" INNER JOIN "t0_child" > ON ("t0_base"."id" = "t0_child"."base_id") > INNER JOIN "t0_child" T3 > ON ("t0_base"."id" = T3."base_id") > WHERE ("t0_child"."flag1" = True AND T3."flag2" = True ) > >>>> qs = qs.filter(child__flag1=False) >>>> print qs.query > SELECT "t0_base"."id" > FROM "t0_base" INNER JOIN "t0_child" > ON ("t0_base"."id" = "t0_child"."base_id") > INNER JOIN "t0_child" T3 > ON ("t0_base"."id" = T3."base_id") > INNER JOIN "t0_child" T4 > ON ("t0_base"."id" = T4."base_id") > WHERE ("t0_child"."flag1" = True AND T3."flag2" = True AND > T4."flag1" = False ) > > I don't think that this is the expected behavior, should I open a new > bug? > > david > > -- > You received this message because you are subscribed to the Google Groups > "Django users" group. > To post to this group, send email to django-users@googlegroups.com. > To unsubscribe from this group, send email to > django-users+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/django-users?hl=en. > Peter of the Norse rahmc...@radio1190.org -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.