Как получить значения поля 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)
Я хочу получить всех пользователей, которые имеют определенное членство (из модели членства)
Например, мне нужен список всех пользователей, у которых есть 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)