Django ORM object.related.id vs object.related_id 使用后 select_related('related')

Django ORM object.related.id vs object.related_id after used select_related('related')

假设我们有这个模型:

class Product(models.Model):
    ....
    price = models.DecimalField(max_digits=12, decimal_places=2)

class Order(models.Model):
    ....
    product= models.ForeignKey(Product)

在使用 select_related 进行这样的查询后 Order.objects.filter(...).select_related('product')order.product.idorder.product_id 之间是否存在性能差异?

会有差异,但与数据库无关。访问 Python 中的任何对象字段时总会有性能成本,因此对于特定示例:

order.product.id

需要从 2 个不同的对象中获取 2 个不同的属性,首先需要从 order 中获取 product 属性,然后需要从 [=12= 中获取 id ].

order.product_id

将只需要获取 1 个属性:product_id 来自 order

这纯粹是为了从内存中获取正确的数据,这在Python中并不是免费的,它不涉及对数据库或其他资源的任何IO。在很多情况下,这种成本非常小,可以忽略不计,因为您的代码中可能会有更多类似的操作。