我有一个名为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)
你可以查询 Widget
模型,并在2个查询中得到你的2个对象列表。
widgets = Widget.objects.filter(portfolio__user=user).distinct()
portfolios = Portfolio.objects.filter(user=user)