Как получить значения поля ManyToMany с помощью selecte_related

Я новичок в django. Я использую поле ManyToMany в моей модели Profile с моделью Membership Model.

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    picture = models.ImageField(blank=True)
    membership = models.ManyToManyField(MemberShip, null=True)

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

enter image description here

Например, мне нужен список всех пользователей, у которых есть Red Membership. Я исследовал и обнаружил, что select_related() или prefetch_related могут помочь в некотором роде. но я не могу понять, как я могу использовать эти методы, чтобы получить то, что я хочу.

Я пробовал следующее:

user_memberships_all = Profile.objects.all()
for m in user_memberships_all:
    affiliate_with_membership = m.membership.select_related('user').all()

но я получаю ошибку Invalid field name(s) given in select_related: 'user'.. если есть другой способ добиться этого. не могли бы вы помочь с этим. Спасибо.

Чтобы получить всех пользователей, относящихся к определенному членству, вы можете проследить за полем OneToOneField назад, а затем отфильтровать по полю ManyToManyField

# Filtering on a "name" attribute of MemberShip

User.objects.filter(profile__membership__name='red')

# Using a MemberShip instance

red_membership = MemberShip.objects.get(name='red')
User.objects.filter(profile__membership=red_membership)
Вернуться на верх