Джанго - устранение дубликатов связанных предметов - PullRequest
1 голос
/ 13 октября 2009

Вот фрагмент из моего приложения:

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 способ, который даст мне уникальный пользовательский набор запросов.

Заранее спасибо.

1 Ответ

1 голос
/ 13 октября 2009

Если вы хотите просто пользователей, то лучше всего начать с таблицы User:

users = User.objects.filter(portfolioitem__contract__market=market)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...