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

javascript - backbone.js Collection.add() doesn't `construct` (`initialize`) an object -

php - Get uncommon values from two or more arrays -

Adding duplicate array rows in Php -