在 Django 中无需再次查询数据库即可获取 ForeignKey 字段的主键

Getting the primary key of a ForeignKey field without querying the database again in Django

我有以下型号:

class Model1(models.Model):
    ...

class Model2(models.Model):
    ...
    model1 = models.ForeignKey(Model1)

现在,假设我有一个 Model2pk=241 的对象,它与 Model1pk=102 的另一个对象相关。我查询他们如下:

 model2 = Model2.objects.get(pk=241)

现在,如果我想要引用的 Model1 对象的 pk。我执行以下操作:

 model2.model1.pk

根据我对表的了解,这应该不会再次查询数据库,但是如果我运行以下内容:

 from django.db import connection
 connection.queries

我得到了 2 个查询的列表。为什么我需要再次查询我的数据库才能得到我相关对象的主键?有没有办法避免这样做?

我知道 select_related(),但是,如果我想在 [=14= 的 save() 方法中调用 Model1 对象 pk 怎么办? ] class?

此外,即使我只想检索相关对象的 pk 而仅此而已,是否还需要 select_related()

您可以在不命中数据库的情况下访问基础字段。

model2.model1_id

此处不需要select_related,因为您实际上并未访问相关对象。