El administrador de Django es muy lento al cargar desde el modelo de usuario OneToOne.
Creo que estoy haciendo mal el modelo de administración porque está tardando unos 30 segundos en cargar y creo que es porque mis consultas SQL son muy ineficientes y pueden estar creando más búsquedas de las necesarias. ¿Existe alguna forma en la que pueda acelerar esto?
class UserInformationAdmin(admin.ModelAdmin):
list_display = (
'user_username',
'user_first_name',
'user_last_name',
'major'
)
@admin.display(description='user.username')
def user_username(self, obj):
try:
return obj.user.username
except Exception:
return None
@admin.display(description='user.first_name')
def user_first_name(self, obj):
try:
return obj.user.first_name
except Exception:
return None
@admin.display(description='user.last_name')
def user_last_name(self, obj):
return obj.user.last_name
davy.ai
Sí, hay varias formas de acelerar la carga del modelo de administrador. Una opción es utilizar select_related() en la queryset para obtener objetos relacionados en una sola consulta SQL en lugar de hacer múltiples consultas. Por ejemplo, se puede agregar el siguiente código a la clase UserInformationAdmin:
Esto obtendrá el objeto User relacionado al obtener los objetos UserInformation, reduciendo la cantidad de consultas necesarias.
Otra opción es utilizar prefetch_related() para obtener objetos relacionados en consultas SQL separadas, pero obtenerlos todos de una vez en lugar de hacer múltiples consultas separadas. Esto puede ser útil para relaciones grandes o consultas complejas. Por ejemplo:
Finalmente, puede ser posible optimizar el esquema de la base de datos o utilizar índices de base de datos para mejorar el rendimiento de las consultas. Una herramienta de perfilado de base de datos o un analizador de consultas pueden ayudar a identificar cuellos de botella y sugerir mejoras.