Фильтрация тегов в M2M Field Django
У меня есть мои модели
Class Category((models.Model)
category = models.CharField()
class Group(models.Model)
Title = models.CharField()
category = models.ManyToManyField(Category, related_name= tags)
Я хочу иметь возможность фильтровать все группы с тегами, схожими с тегами группы, которая в данный момент находится в просмотре
В моем файле views.py я попытался
group = Group.objects.get(id=pk)
groups = Group.objects.filter(category=group.category)
Но это не работает
Вы можете получить все группы, которые имеют как минимум одну Category
общую с:
Group.objects.filter(category__in=group.category.all()).distinct()
Вызов .distinct()
[Django-doc] предотвращает перечисление Group
столько раз, сколько существует подходящих category
s.
Другой вариант - использовать отношение в обратном порядке, и таким образом работать с:
Group.objects.filter(category__tags=group).distinct()
Однако имя отношения не имеет особого смысла: параметр related_name=…
[Django-doc] - это имя отношения в обратном порядке, related_name='groups'
поэтому имеет больше смысла. В этом случае мы запрашиваем с:
Group.objects.filter(category__groups=group).distinct()