需要帮助制定一个查询

问题描述 投票:0回答:1

我有一个名为Portfolios的模型,其中一个字段包含一组Widgets。我试图创建一个查询,从选定的Portfolios中返回Unique的Widgets集合。

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]

当然,如果它们必须以这种方式返回,我可以从字典条目中提取实例。我试图以最好的性能来做这件事,因为我试图解决手动迭代结果和做额外查询的性能问题。

除了Widgets的列表,我还需要得到Widgets所包含的所有Portfolios的列表。从性能的角度来看,最好的方法是什么?我是否需要对每个Widgets进行迭代,并为每个Widgets做一个单独的查询?

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)
django django-models
1个回答
0
投票

你可以查询 Widget 模型,并在2个查询中得到你的2个对象列表。

widgets = Widget.objects.filter(portfolio__user=user).distinct()
portfolios = Portfolio.objects.filter(user=user)
© www.soinside.com 2019 - 2024. All rights reserved.