Как использовать django related_name

I есть две модели с именами Meeting и MeetingMember следующим образом :

 class Meeting(models.Model):
    
      title = models.CharField(max_length=255)
      description = models.TextField()

   class MeetingMember(models.Model):
    CHOICES = (
    ("A", "Accepted"),
    ("R", "Rejected"),
    ("I", "Invited" ),
    ("H", "Host"))

    status = models.CharField(max_length=9, choices=CHOICES, default="I")
    meeting = models.ForeignKey(Meeting, on_delete=models.CASCADE,    related_name="members")
     email = models.EmailField(blank=True)

Мне нужно написать запрос, который сначала получает все записи в модели MeetingMeember, принадлежащие текущему вошедшему пользователю, следующим образом :

meetingmembers  = MeetingMember.objects.filter(email = request.user.email)

Затем мне нужно получить всю информацию из встреч, принадлежащих члену встречи (второй набор запросов должен быть объектом Meeting). Я изучал вопрос о related_name, но все еще не могу понять, как я могу написать это.

Атрибут related_name задает имя обратного отношения от модели Meeting обратно к модели MeetingMember.

Если у вас есть объект MeetingMember типа meeting_member и ваше related_name равно 'members', то meeting_member.members.all(), чтобы получить все экземпляры вашей модели Meeting, которые имеют отношение к объекту.

Вы можете фильтровать с помощью:

Meeting.objects.filter(
    members__email=request.user.email
)

получить все Meeting, для которых email вошедший пользователь является членом.

Если вы работаете с моделью Member, вы можете использовать .select_related(…) [Django-doc] для получения объекта Meeting в том же запросе, тогда для some_member вы можете получить доступ к связанному Meeting (и информации с) some_member.meeting без дополнительного запроса:

meetingmembers = MeetingMember.objects.filter(
    email=request.user.email
).select_related('meeting')

for member in meetingmenbers:
    print(member.meeting)

В соответствии с вашим проектом объект Meeting принадлежит нескольким объектам MeetingMember и вы можете получить к ним доступ, используя связанное имя members, например metting_obj.members.all(), а объект MeetingMember принадлежит одному объекту Meeting и вы можете оценить его, используя атрибут meeting, например metting_member_obj.metting

вы можете получить все Meeting объекты принадлежащие MeetingMember объектам следующим образом:

meeting_objs = [meeting_member.meeting for meeting_member in meetingmembers]
Вернуться на верх