假设我有以下型号:
class Product:
name = models.CharField(max_length=128)
class ProductVersion:
name = models.CharField(max_length=128)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
对于给定的
ProductVersion
对象,是否有办法检测 Product
对象是否通过 select_related
预取?例如:
# Yes, "product" was prefetched
ProductVersion.objects.select_related("product").first()
# No, "product" was NOT prefetched
ProductVersion.objects.first()
看起来有一种方法可以做到这一点是
prefetch_related
(请参阅此处),但我需要它selected_related
。
您可以使用查询中的
JOIN
单词检查来做到这一点
queryset = ProductVersion.objects.select_related("product")
sql_query = str(queryset.query) # convert ORM query to SQL query
if 'JOIN' in sql_query:
print("Product object was prefetched via select_related")
else:
print("Product object was NOT prefetched via select_related")