Это также может быть сделано путем создания динамических запросов с использованием Django ORM и некоторой магии Python:)
from operator import and_
from django.db.models import Q
categories = ['holiday', 'summer']
res = Photo.filter(reduce(and_, [Q(tags__name=c) for c in categories]))
Идея состоит в том, чтобы генерировать соответствующие объекты Q для каждой категории, а затем объединять их с помощью оператора AND в один QuerySet. Например. для вашего примера он будет равен
res = Photo.filter(Q(tags__name='holiday') & Q(tags__name='summer'))