【发布时间】:2021-12-23 21:46:34
【问题描述】:
我的项目中有一个查询:
qs = self.model.objects \
.filter(user=self.request.user, pk__iexact=pk) \
.select_related('shipping_addr', 'billing_addr', 'cart') \
.first()
我想进一步优化这个查询。 我只想获取 shipping_addr 的“id”和“name”字段。 但这不起作用:
qs = self.model.objects \
.filter(user=self.request.user, pk__iexact=pk) \
.select_related('shipping_addr', 'billing_addr', 'cart') \
.only('shipping_addr__name','shipping_addr__id') \
.first()
我知道这段代码没有运行的原因,我不知道我该怎么办????。
【问题讨论】:
-
为什么要获取三个相关模型,而您只需要一个?为什么要使用双下划线?这些不适用于选择字段。您也可以只使用 pk=pk。
-
1:这只是一个示例。不是我想做的所有事情。 “简单胜于复杂”_____2:是的,没错。也许最好使用 pk=pk.____ 你对主要问题有什么想法吗?
-
我已经在下面回答了。我认为您问题中的查询没有多大意义。不需要
first()和filter(),因为你得到一个对象是因为 pk。您也不需要获取其他两个模型,因为之后您不再使用它们。因此,它只是一个对象,而不是与一个相关对象一起获取的查询集。然后就像我在答案中显示的那样获取您的相关字段。我认为不需要进一步优化。
标签: django django-models optimization django-orm