【问题标题】:Multy queryset. Compare two queryset and find compared item多查询集。比较两个查询集并找到比较项
【发布时间】:2019-10-25 21:57:39
【问题描述】:

我有一个不清楚的任务。我需要找到一个存在于两个用户中的对象。 例如。每个用户都有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

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    您可以通过两个查询找到。与您的实现类似。

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-04
      • 2013-04-10
      • 2011-12-06
      • 2011-04-15
      • 2017-12-16
      • 1970-01-01
      相关资源
      最近更新 更多