Я думаю, что ответ Дрю Сирса выше (прикрепление случайного числа к каждой сущности при создании) имеет потенциальную проблему: у каждого предмета нет равных шансов быть выбранным.Например, если существует только 2 сущности, и одна получает значение rand_num, равное 0,2499, а другая получает 0,25, то одна единица, равная 0,25, будет выбрана почти все время.Это может иметь или не иметь значения для вашего приложения.Вы можете исправить это, изменяя rand_num объекта каждый раз, когда он выбирается, но это означает, что для каждого чтения также требуется запись.
И ответ пикс всегда будет выбирать первую клавишу.
Вотлучшее универсальное решение, которое я мог бы придумать:
num_images = Image.all().count()
offset = random.randrange(0, num_images)
image = Image.all().fetch(1, offset)[0]
Никаких дополнительных свойств не требуется, но недостатком является то, что count () и fetch () оба влияют на производительность, если число изображений велико.