以下是我的应用程序的片段:
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方式,它将为我提供一个独特的用户查询集。
提前致谢。
答案 0 :(得分:1)
如果您只是想要用户,那么最好的方法是从User表开始:
users = User.objects.filter(portfolioitem__contract__market=market)