Один из способов, который, вероятно, сработал бы «достаточно хорошо» (если вы можете позволить себе подсчитать): выбрать случайный индексированный столбец для упорядочения. Закажите весь набор запросов этим. Выберите диапазон между верхом и низом набора результатов (например, 1234: 1254) и возьмите оттуда 1 случайный результат. При 50 тыс. Строк это ~ вероятно ~ блик с точки зрения времени запроса (хотя tbh, возможно, и rand ()), однако я пытаюсь перевести его в свою собственную кодовую базу, насколько я могу создание ПО c для производственного кода, и я знаю, order_by("?")
убьет мою БД
@api_view(['GET', 'POST'])
def questions_view(request):
if request.method == 'GET':
questions = Question.objects.all().order_by('?').first()
serializer = QuestionListPageSerializer(questions)
return Response(serializer.data)