Repaso
English
Backend y APIsIntermedioAPI-13

Listar 50 pedidos y luego acceder a order.customer.name en un bucle dispara 51 consultas. En Django, la solución habitual para esta foreign key es…

Opciones

  1. prefetch_related("customer")
  2. select_related("customer") (Opción correcta)
  3. .only("customer")
  4. .raw()

Respuesta

select_related("customer")

Por qué

Este es el problema N+1: 1 consulta para traer los pedidos y luego 1 consulta extra por pedido para traer su cliente.

select_related("customer") carga pedidos y clientes juntos en una consulta con un SQL JOIN.

prefetch_related usa una segunda consulta para todas las filas relacionadas a la vez (para relaciones many-to-many o inversas). En SQLAlchemy: joinedload / selectinload.

Recuerda

Bucle que consulta por elemento = N+1. Carga antes los datos relacionados.

Términos clave

Practica esta pregunta en Repaso