Вот фрагмент из моего приложения:
class PortolioItem(models.Model):
...
user = models.ForeignKey(User)
contract = models.ForeignKey(Contract)
quantity = models.IntegerField(...)
...
class Contract(models.Model):
...
market = models.ForeignKey(Market)
...
Вы можете видеть, что у пользователя столько же PortfolioItems, сколько у него различных контрактов.
Я хочу отправить электронное письмо пользователям, у которых есть какие-либо "контракты" определенного "рынка" в их портфелях. И я хочу отправить электронное письмо пользователю только один раз, независимо от того, сколько разных типов контрактов на этом рынке он может иметь. Вот что я делаю:
#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 способ, который даст мне уникальный пользовательский набор запросов.
Заранее спасибо.