Seleccionar un elemento aleatorio de una lista de todos los objetos de la base de datos no es una buena solución, ya que recuperar todos los elementos de la base de datos puede tener un gran impacto en el rendimiento, como tampoco lo es usar order_by('?')
. como se menciona en la documentación de django
.
La mejor solución debería ser recuperar un elemento con un índice aleatorio:
import random
random_idx = random.randint(0, Model.objects.count() - 1)
random_obj = Model.objects.all()[random_idx]