django - 消除重复的相关项目

时间:2009-10-13 07:14:50

标签: django

以下是我的应用程序的片段:

class PortolioItem(models.Model):
    ...
    user = models.ForeignKey(User)
    contract = models.ForeignKey(Contract)
    quantity = models.IntegerField(...)
    ...

class Contract(models.Model):
    ...
    market = models.ForeignKey(Market)
    ...

您可以看到,用户拥有的投资单元数量与其拥有的不同合约数量相同。

我想通过电子邮件向在其投资组合中拥有特定“市场”任何“合同”的用户发送电子邮件。而且我想只向用户发送一次电子邮件,无论他拥有多少种不同类型的合约。这是我的所作所为:

#get users that want to receive notices
users = User.active_users.investment_notices_users()
#get portfolio items for a specific market
market = Market.objects.get(pk=1)
portfolio_items = PortfolioItem.objects.filter(contract__in = market.contracts.all(), user__in = users)

由于用户可以拥有同一市场的不同类型的合同,因此查询集可以包含多于一次的用户。我可以通过多种方式消除重复的用户(一个简单的解决方案似乎是:queryset - > list - > set - > list),但我想知道我是否处于低效/非优雅的解决方案并且可以是一种更好的ORM方式,它将为我提供一个独特的用户查询集。

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您只是想要用户,那么最好的方法是从User表开始:

users = User.objects.filter(portfolioitem__contract__market=market)