Фильтр модели Django с "точным" оператором IN

Я хочу найти всех пользователей, у которых точно такие же теги, как у определенной категории (точно такие же теги, а также одинаковое количество присвоенных тегов)

Что-то вроде...

category = Category.objects.first()
User.objects.filter(tags__in=category.tags.filter())

Но это возвращает также пользователей, которые разделяют с категорией даже только один тег.

Модели являются

class User(models.Model):
    tags = models.ManyToManyField(Tag, blank=True, related_name='users')


class Category(models.Model):
    tags = models.ManyToManyField(Tag, blank=True, related_name='categories')

class Tag(models.Model):
    name = models.CharField(max_length=255, blank=False)

Любое решение будет оценено по достоинству.

Не самое лучшее решение, но, возможно, сработает.

Итерация над User набором запросов и фильтрация их по одному. пример:

category = Category.objects.first()
for tag in category.tags.all():
    qs = User.objects.filter(tags__id=tag.id)

Другой:

category = Category.objects.first()
tag_ids = category.tags.values_list("id", flat=True)

valid_users = []
for user in User.objects.all():
    user_tag_ids = user.tags.values_list("id", flat=True)
    if set(user_tag_ids) == set(tag_ids):
        valid_users.append(user)
Вернуться на верх