Thank you, Tom.  I understand now.  I come from java and I was not
aware that such a syntax is allowed.  I got the Q objects part of my
app working thanks to you guys.



On Apr 8, 8:08 am, Tom M <mediaf...@googlemail.com> wrote:
> Just to explain
>
> q = q | f if q else f
>
> is using the short version of if/else, so let's expand that:
>
> if q:
>     q = q | f
> else:
>     q = f
>
> q is only False when you have a Q object with no parameters i.e. Q()
>
> and as you may have seen above | means OR. This is because the Q
> object implements the __or__ special method.
>
> On 7 Apr, 19:56, Daniel <unagimiy...@gmail.com> wrote:
>
> > Thanks alot guys.  If I can be honest, I'm having a little trouble
> > digesting just this one line:
>
> > q = q | f if q else f
>
> > That line of code only allows (q1 | q2 | q3), right?
>
> > It will not allow mixing "AND" as well as "OR" (i.e., q1 & q2 | q3)?
>
> > Thanks!
>
> > On Apr 7, 1:26 pm, Vinicius Mendes <vbmen...@gmail.com> wrote:
>
> > > On Wed, Apr 7, 2010 at 2:00 PM, Tom Evans <tevans...@googlemail.com> 
> > > wrote:
> > > > On Wed, Apr 7, 2010 at 5:39 PM, Daniel <unagimiy...@gmail.com> wrote:
> > > > > Hi,
>
> > > > > Thank you for your help everyone.  I know that I need to learn python
> > > > > better, and I did read those articles.  What is still a bit unclear to
> > > > > me, though, is how could I add an "OR" or "AND" separator between Q
> > > > > objects?
>
> > > > > So I have a list of qobjects like [qObj1, qObj2, qObj3].
>
> > > > > What I want is something like Sample.objects.filter((qObj1 | qObj2),
> > > > > qObj3)
>
> > > > > I know that the default is for all Q objects to be "ANDed" together.
> > > > > I think the join operation is not going to work here, nor is
> > > > > concatenation, but is there something obvious that I'm missing?
>
> > > > > THANK YOU :>
>
> > > > Documentation on how to combine Q objects:
>
> > > >http://docs.djangoproject.com/en/1.1/topics/db/queries/#complex-looku...
>
> > > > So you want to loop through them, and 'or' them together..
>
> > > > filters = [ q1, q2, q3, q4, q5 ]
> > > > q = None
> > > > for f in filters:
> > > >  q = q | f if q else f
> > > > Foo.objects.filter(q)
>
> > > Refining a little:
>
> > > filters = [q1,q2,q3,q4,q5]
> > > q = Q()
> > > for f in filters:
> > >     q |= f
> > > Foo.objects.filter(q)
>
> > > Q() is identity for & and |.
>
> > > > Tom
>
> > > > --
> > > > You received this message because you are subscribed to the Google 
> > > > Groups
> > > > "Django users" group.
> > > > To post to this group, send email to django-us...@googlegroups.com.
> > > > To unsubscribe from this group, send email to
> > > > django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com>
> > > > .
> > > > For more options, visit this group at
> > > >http://groups.google.com/group/django-users?hl=en.
>
> > > ______________________
> > > Vinícius Mendes
> > > Solucione Sistemashttp://solucione.info/

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@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.

Reply via email to