İçeriğe geç

Eksik Eager Load (ARCH2051)

Anahtar python.orm.missing-eager-load · Önem warning · Kategori orm

İlişkili navigasyon verisini select_related / prefetch_related belirtmeden dolaşmak, çalışma anında N+1 sorgu tetikler. Eager load, bunu önlemenin kanonik yoludur.

orders = Order.objects.filter(status="paid")
for order in orders:
total = sum(item.price for item in order.items.all()) # her order için SELECT
orders = Order.objects.filter(status="paid").prefetch_related("items")
for order in orders:
total = sum(item.price for item in order.items.all()) # tek seferde yüklendi

İlişki üzerinde iterasyon yapmadan önce sorguya prefetch_related veya select_related ekleyin.