访问嵌套 FK 关系的字段值是否会降低性能?



我有各种通过外键关系互连的模型,这样做会降低性能吗。我想知道django内部是如何做到这一点的。

PriceSheet.objects.select_related('query').filter(
id=pricesheet_id
).values(
'query__campaign_name', 'query_id', 'query__campaign_status',
'query__lead_id', 'query__lead__legal_name', 'query__lead__brand_name' # nested
'query__lead__working_capital', 'query__lead__payment_terms'
)  # 7

您可以通过打印检查查询:

print(queryset.query)

在这种情况下,Django将打印它将进行的查询。在这种情况下,查询将看起来像:

选择query.campaign_name,price_sheet.id,query.campagn_status,query.lead_id,lead.legal_name,lead.brand_name,lead.working_capital,lead.payment_terms自价格表LEFT OUTER JOIN查询打开query.id=price_sheet.query_idLEFT OUTER JOINleadONlead.id=query.lead_id因此,WHERE price_sheet.id=pricesheet_id

Django将在queryquerylead引用的模型上生成JOIN。在这种情况下,使用.select_related(…)[Django-doc]强制JOIN是不必要的。

通常,当您想将数据转换为JSON blob时,使用.values(…)Django-doc]更好,因为它会侵蚀模型提供的逻辑层。例如,对于有选择的字段,您不能再(轻松(访问显示名称等。

相关内容

最新更新