Как проверить, является ли поле ManyToManyField подмножеством набора запросов при фильтрации в Django
class OrganizationUser(models.Model):
pass
class Feedback(models.Model):
teams_shared_with = models.ManyToManyField('team.Team', related_name="feedback")
class Team(models.Model):
leads = models.ManyToManyField('organizations.OrganizationUser', related_name='teams_lead_at')
members = models.ManyToManyField('organizations.OrganizationUser', related_name='teams_member_at', blank=True)
У меня есть вышеуказанная модель, все поля не были показаны. Я хочу отфильтровать те отзывы, которыми поделились в любой команде, где я являюсь членом или администратором.
Я хотел бы сделать что-то вроде:
Feedback.objects.filter(teams_shared_with is a subset of organization_user.teams_lead_at.all()|organization_user.teams_member_at.all())
Как мне это сделать?
from django.db.models import Q
user1 = OrganizationUser.objects.first() #some organization user
Feedback.objects.filter(
Q(teams_shared_with__leads=user1)
|Q(teams_shared_with__members=user1)
)
Существует вероятность дублирования отзывов Используйте distinct(), чтобы избежать этого
from django.db.models import Q
users = OrganizationUser.objects.all()
Feedback.objects.filter(
Q(teams_shared_with__leads = users)
|Q(teams_shared_with__members = users)
).distinct()