Efectivamente order_by('?', 'peso') te lo devuelve de manera aleatoria y como cada vez que refrescas manda una petición para volver a ordenar de manera aleatoria es normal que te de otro resultado.
No entiendo que es lo quieres
¿quieres que te muestre los resultados de manera ascendente como en el fragmento que pusiste?
¿O quieres que sea "aleatorio" pero que no cambie a lo largo de la ejecución?
Código Python:
Ver original# En alguna variable a nivel de modulo
queryset = list(queryset.order_by('peso'))
# dentro de la vista, llamas a queryset.
def home(request):
# ...
some_function(queryset)
# ...
Ojo si añades mas imágenes esto no se vera reflejado porque siempre serán los mismos elementos.