You need to build up the Q object and then filter on it so:
results = RelatedModel.objects.all()
q = Q()
for category in category_list:
q |= Q(categories__slug = category.slug)
results = results.filter(q)
On Jan 5, 10:52 am, Bluemilkshake <[email protected]>
wrote:
> Hello. Django noob here, pretty much.
>
> I understand how one can use Q objects to construct OR statements
> within a QuerySet, but (how) is it possible to do this dynamically?
>
> I have a list of categories, and I want to find items that match ANY
> of those categories. The current solution doesn't work too well as it
> lists items that match ALL of the categories in the list. This is done
> in this way:
>
> results = RelatedModel.objects
> for category in category_list:
> results = results.filter(categories__slug = category.slug)
>
> So as you can see this is building an initial resultset of
> RelatedModel objects, then narrowing it down with each iteration
> through my category list (maybe not the most efficient way to do it,
> but the one that made sense to me). Is it possible to do something
> similar, but where Django produces OR statements instead of AND ones,
> or should I just use the extra() function and supply the SQL myself?
>
> Thanks a lot for your help.
> -Mark
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" 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-users?hl=en
-~----------~----~----~----~------~----~------~--~---