在 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)
现在,假设我有一个 Model2
和 pk=241
的对象,它与 Model1
和 pk=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
,因为您实际上并未访问相关对象。
我有以下型号:
class Model1(models.Model):
...
class Model2(models.Model):
...
model1 = models.ForeignKey(Model1)
现在,假设我有一个 Model2
和 pk=241
的对象,它与 Model1
和 pk=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
,因为您实际上并未访问相关对象。