Django:检查外键字段是否已加载

Jer*_*her 7 django django-models

我有两个 Django 模型

class ValidName:
    name = models.TextField()

class MetaSyntacticName(ValidNames):
    name = models.ForeignKey(ValidName)
    usages = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

如果我有一个 MetaSyntropicName 实例,我是否可以查明其名称引用的 ValidName 实例是否已从数据库加载而无需进行数据库查询?

rud*_*dra 1

如果你调用select_lated,则不会有任何额外的数据库查询来预填充foreignkey相关对象。例如:(从文档复制粘贴):

\n\n
# Hits the database.\ne = Entry.objects.get(id=5)\n\n# Hits the database again to get the related Blog object.\nb = e.blog\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里\xe2\x80\x99s select_lated查找:

\n\n
# Hits the database.\ne = Entry.objects.select_related(\'blog\').get(id=5)\n\n# Doesn\'t hit the database, because e.blog has been prepopulated\n# in the previous query.\nb = e.blog\n
Run Code Online (Sandbox Code Playgroud)\n