викторина рандомизировать получение дубликатов в производстве - PullRequest
0 голосов
/ 20 января 2020

Один из способов, который, вероятно, сработал бы «достаточно хорошо» (если вы можете позволить себе подсчитать): выбрать случайный индексированный столбец для упорядочения. Закажите весь набор запросов этим. Выберите диапазон между верхом и низом набора результатов (например, 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)

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Я думаю, вы должны сохранить вопросы, на которые пользователи ответили, и ответ на них. Предположим, что модель называется AnsptedQuestion и имеет fk как для пользователя, так и для вопроса. вы должны просто получить случайные вопросы между вопросами, которые не связаны с пользователем в AnsptedQuestion.

0 голосов
/ 20 января 2020

Это может быть более экономичным:

import random
question = Question.objects.all()[random.randint(0, Question.objects.all().count()-1)]
...