在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。