Multy queryset.Сравните два набора запросов и найдите сравниваемый элемент - PullRequest
0 голосов
/ 11 июня 2019

У меня есть одно непонятное для меня задание.Мне нужно найти один объект, который существует у двух пользователей.Например.У каждого пользователя есть AdditionalInfo, также у меня есть таблица AddInfoTeam, где у меня есть отношение ManyToMany:

class AddInfoTeam(models.Model):
    add_info = models.ForeignKey(AdditionalInfo,
                                 on_delete=models.CASCADE)
    team = models.ForeignKey(Team,
                             on_delete=models.CASCADE)

Каждый пользователь может существовать во многих командах.

Например, у меня есть 2 пользователя - user1 и user2.Мне нужно выяснить, с какой командой они вместе.

Это мой пример кода:

# get additional info for user1
add_info_dealer = AdditionalInfo.objects.get(user=dealer)
# get additional info for user2
 add_info_grower = AdditionalInfo.objects.get(user=grower)

# get all teams for user 1
 dealer_teams = AddInfoTeam.objects.filter(add_info=add_info_dealer)
# # get all teams for user 2
    grower_teams = AddInfoTeam.objects.filter(add_info=add_info_grower)

# this is bad code, i try to find someting better than this:

    for dealer_team in dealer_teams:
        for grower_team in grower_teams:
            if grower_team.id == dealer_team.id:
                return grower_team

1 Ответ

0 голосов
/ 11 июня 2019

вы можете найти с двумя запросами.Реализация, похожая на вашу.

add_info_dealer = AdditionalInfo.objects.get(user=dealer)
add_info_grower = AdditionalInfo.objects.get(user=grower)
dealer_teams = AddInfoTeam.objects.filter(add_info=add_info_dealer)
grower_teams = AddInfoTeam.objects.filter(add_info=add_info_grower)
return dealer_teams.intersection(grower_teams)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...