django选择与多个外键相关的

django选择与多个外键相关的,django,django-select-related,Django,Django Select Related,对于具有多个外键的模型,与select_相关的如何工作?它只是选择第一个吗 类别模型: fkey1,fkey2,fkey3 文档中没有提到这一点,至少在指定方法的地方没有提到 注:也许我是唯一一个会感到困惑的人。我想select_related只是一个性能提升器(我可以看到),但我错误地认为它是另一个东西。相反,文档对此非常清楚。它表示默认情况下会遵循所有foreignkey,但您可以为该方法提供一个字段列表,它只会遵循这些关系。您可以在链中使用选择相关的,如下所示 Comment.object

对于具有多个外键的模型,与select_相关的如何工作?它只是选择第一个吗

类别模型: fkey1,fkey2,fkey3

文档中没有提到这一点,至少在指定方法的地方没有提到


注:也许我是唯一一个会感到困惑的人。我想select_related只是一个性能提升器(我可以看到),但我错误地认为它是另一个东西。

相反,文档对此非常清楚。它表示默认情况下会遵循所有foreignkey,但您可以为该方法提供一个字段列表,它只会遵循这些关系。

您可以在链中使用
选择相关的
,如下所示

Comment.objects.select_related('user').select_related('article').all()

如果您的模型具有多个外键,则可以:

  • 调用
    。选择_related()
    ,它将“遵循”所有非空外键关系
  • 调用
    。选择相关('foreign\u key1'、'foreign\u key2'、…)
    ,它将仅“跟随”作为参数提供的外键
请注意,“遵循FK关系”意味着在执行查询时选择其他相关对象数据(通过执行SQL联接)。这将使主查询更重,但可用于避免

根据,不建议使用第一种方法(不带参数),因为“它可能使基础查询比实际需要的更复杂,并返回更多数据。”


如果您的模型与其他模型(即
Book--Author--homerium
)具有“嵌套”外键,您也可以使用
select_related
,如下所示:

  • 调用
    Book。选择相关('author\u homerium')
    ,它将“跟随”作者的外键(在书本模型中)和家乡的外键(在作者模型中)


如果您的模型有多对多或多对一的关系,您希望从数据库中检索,那么您应该看看。

hmm,也许我只是在概念上不理解它。然后,它只是“过滤掉”没有外键值的对象?需要澄清的是,
user
article
都是
Comment
上的外键字段。上述内容相当于
Comment.objects.select_related('user','article').all()
。(上下文:我正在研究是否可以跨多个关系
select_related()
。上面没有这样做。)我将此代码用于django 1.4:related_fields='user,article,user_profile'Comment.objects。select_related(related_fields)但是,它在django 1.9中不起作用,因为django认为这是一个不存在的单一字段。当我将相关的_字段转换为类似于此的列表时,相关的_字段=['user','article','user_uprofile'],它仍然抱怨无法将split(',')应用于列表(显然不是字符串)。这是虫子吗?