Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中获取不同的随机查询集_Django_Postgresql_Django Queryset - Fatal编程技术网

在django中获取不同的随机查询集

在django中获取不同的随机查询集,django,postgresql,django-queryset,Django,Postgresql,Django Queryset,您好,我正在尝试执行一个可替换此查询的查询集: SELECT DISTINCT ON (question.exercise_id) question.exercise_id, question.* FROM exercise, question WHERE exercise.id = question.exercise_id OFFSET random()*(SELECT count(*) FROM question) LIMIT 5; 在查询正常

您好,我正在尝试执行一个可替换此查询的查询集:

SELECT DISTINCT ON (question.exercise_id) question.exercise_id, question.* 
    FROM 
        exercise, question 
    WHERE exercise.id = question.exercise_id
    OFFSET random()*(SELECT count(*) FROM question) LIMIT 5;
在查询正常工作之前

我试着用django和

random_questions = Questions.objects.filter(
    text=text # text is a Text instance
).distinct('text').order_by('?')[:5]
但不起作用,我搜索并发现我如何使它永远不会起作用,但我没有找到一个替代的解决方案


谢谢

我没有找到一个答案,所以我能找到的唯一方法是:

texts = Text.objects.all().order_by('?') # add .prefetch_related('questions_text') or .select_related('questions_text') could help to do the query faster
questions = []
for text in texts:
    questions.append(
        Question.objects.filter(
            text=text
        ).order_by('?')[0]
    )

试着这样做:

random_questions = Questions.objects.filter(
    text=text # text is a Text instance
).distinct('text').order_by('text', '?')
然后使用len(随机_问题)从该查询集中随机选取五项,以查看有多少结果。将比您当前所做的更快

您还可以使用原始sql执行此操作(但如果有用户输入,请验证用户输入):


这是区别吗?或者在提供问题时输入错误?如果是,则将其更改为distinct。