Как сделать запрос по нескольким моделям в Django

Я использую Django и хочу знать, как получить объекты через 3 модели. Вот мои модели

class Participant(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    is_leader = models.BooleanField(default=False)
    team = models.ForeignKey(Team, on_delete=models.CASCADE, null=True, related_name="participants")
    application_date = models.DateField(auto_now_add=True, null=True)
    resolution_date = models.DateField(null=True, blank=True)
    accepted = models.BooleanField(default=False)

class Team(models.Model):
    name = models.TextField(default="")
    is_public = models.BooleanField(default=False)
    institution = models.ForeignKey(Institution, on_delete=models.CASCADE, null=True, related_name='teams')
    campaign = models.ForeignKey(Campaign, on_delete=models.CASCADE, null=True, related_name='teams')

class Campaign(models.Model):
    name = models.TextField(default="")
    description = models.TextField(default="")
    initial_date = models.DateTimeField(auto_now_add=False, null=True, blank=True)
    end_date = models.DateTimeField(auto_now_add=False, null=True, blank=True)
    qr_step_enabled = models.BooleanField(default=True)
    image_resolution = models.IntegerField(default=800)
    sponsor = models.ForeignKey(Sponsor, on_delete=models.CASCADE, null=True, related_name='campaigns')

У меня есть пользователь через запрос, и я хочу получить все кампании этого пользователя. Я пытался сделать это с помощью циклов for, но я хочу сделать это с помощью запросов. вот что у меня было:

user = request.user
participants = user.participant_set.all()
for participant in participants:
  participant.team.campaign.name

есть ли способ сделать запрос через эти модели и для всех участников? У пользователя может быть много участников, и у каждого участника есть Команда, у каждой команды есть кампания

Лучший способ - объединить две модели Team и Campaign в одну модель.

Должно сработать что-то простое вроде этого:

Campaign.objects.filter(team__participant__user=request.user)

Django ORM достаточно умна, чтобы отслеживать отношения внешних ключей в обоих направлениях.

Спасибо Daniel W. Steinbrook, который направил меня к ответу, я должен был сделать следующее, чтобы получить запрос:

Campaign.objects.filter(teams__participants__user__exact=request.user)
Вернуться на верх