У меня есть модель с именем 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)