Django лучше присоединиться - PullRequest
0 голосов
/ 07 марта 2020

Вот мои модели. Это как приложение спортивной команды. Модель событий - это спортивное событие, похожее на бейсбольный матч. Любой может принадлежать к нескольким командам. Итак, член команды представляет членство в команде.

class Team(models.Model):
    name = models.CharField(max_length=100, blank=True)

class TeamMember(models.Model):
    member = models.ForeignKey(User, on_delete=models.CASCADE)
    team = models.ForeignKey(Team, on_delete=models.CASCADE)

class Event(models.Model):
    team = models.ForeignKey(Team, on_delete=models.CASCADE)

Я хочу получить список событий, которые есть в моей команде.

def get_queryset(self):
    teams = TeamMember.objects.filter(member=self.request.user).values('team')
    return Event.objects.filter(team__in=teams)

Это работает, но я хочу сделать это к единому соединению. Мой ORM-фу не так уж и хорош.

1 Ответ

2 голосов
/ 07 марта 2020

Как говорит Документы

Django предлагает мощный и интуитивно понятный способ «следить» за отношениями в поисках, автоматически заботясь о SQL СОЕДИНЕНИЯХ для вас, за кулисами. Чтобы охватить отношение, используйте имя поля связанных полей в моделях, разделенных двойным подчеркиванием, пока не доберетесь до нужного поля.

...

Работает в обратном направлении , тоже. Чтобы обратиться к «обратной» взаимосвязи, используйте строчное название модели.

Event.objects.filter(team__teammember__member=self.request.user)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...