Django ManyToMany Queryset AND instead of OR -


i have following query:

things = thing.objects.filter(tags__in=selected_tags).distinct() 

if selected_tags looks this:

selected_tags = [<tag: tag1>, <tag: tag2>] 

then things contain thing has tag1 or tag2.

i want query gives me things have tag1 , tag2 (and maybe tag3, not necessarily). best way this?

__in inherently or-based. literally says pull out row has 1 of these tags. create , based query, you'd need filter each tag individually:

thing.objects.filter(tags=tag1, tags=tag2, ...) 

that's not ideal, , unfortunately, can't use expanded dictionary in scenario because of key's same. other option use q:

from django.db.models import q query = none tag in tags: if query none: query = q(tags=tag) else: query &= q(tags=tag) things = thing.objects.filter(query) 

it's bit convuluted, if need dynamically create query (instead of hardcoding each tag you're searching for), it's best bet.


Comments

Popular posts from this blog

JQuery Autocomplete without using label, value, id -

c++ - Accessing inactive union member and undefined behavior? -

JAVA - what is the difference between void and boolean methods? -