Нужна помощь в формулировании запроса - PullRequest
0 голосов
/ 06 мая 2020

У меня есть модель с именем Portfol ios, где одно поле содержит набор виджетов. Я пытаюсь создать запрос, который вернет мне уникальный набор виджетов из выбранного набора Portfol ios.

list(Portfolio.objects.filter(user=user).values('widgets').distinct())

Из этого запроса я получаю список, который выглядит следующим образом

[{'widgets': 2}, {'widgets': 6}, {'widgets': 159}, {'widgets': 184}, {'widgets': 291}]

Я не могу понять, как заставить его возвращать список разрешенных экземпляров Widget. В конечном итоге мне нужно вот что.

[WidgetInst1, WidgetInst2, WidgetInst3, WidgetInst4, WidgetInst5]

Я, конечно, могу вытащить экземпляры из словарных статей, если они должны вернуться таким образом. Я пытаюсь сделать это с максимально возможной производительностью, поскольку я пытаюсь решить проблемы с производительностью, вручную перебирая результаты и выполняя дополнительные запросы.

В дополнение к списку виджетов мне также нужно получить список всех Portfol ios, в которых содержатся виджеты. Что было бы наилучшим способом go об этом с точки зрения производительности? Нужно ли мне перебирать каждый из виджетов и выполнять отдельный запрос для каждого из них?

class Portfolio(PolymorphicModel):
    name = models.CharField(max_length=200)
    user = models.ForeignKey(User, unique=False, on_delete=models.PROTECT)
    description = models.TextField(blank=True)
    widgets = models.ManyToManyField(Widget, blank=True)

1 Ответ

0 голосов
/ 06 мая 2020

Вы можете запросить модель Widget напрямую и получить 2 списка объектов за 2 запроса

widgets = Widget.objects.filter(portfolio__user=user).distinct()
portfolios = Portfolio.objects.filter(user=user)
...