arrays - Django 查询循环
问题描述
我一直在尝试找出一种更有效的方法来做下面的事情。一个存在吗?问题是我必须执行此循环 100 次(在我的测试用例中,但在现实生活中更多),每个循环中大约有 100 个项目,这使得它非常慢。必须有一种方法来比较查询结果,例如 JS 中的 array.filter。但我似乎无法为 Django 找到它。
for choice in question.answer_choices.all():
amount = 0
for ans in q_answers:
if choice in ans.answers.all():
amount += 1
它基本上是选择答案并计算有多少匹配项,以便从一组答案选择中为每个选择给我一个结果。
q_answers 只是用户针对“问题”给出的一组答案。
编辑:
我稍微提高了效率。但仍然是同样的问题。
for choice in question.answer_choices.all():
matched_answers = [ans for ans in q_answers if choice in ans.answers.all()]
amount = len(matched_answers)
结构:
class ReportUserAnswers(models.Model):
question = models.ForeignKey(ReportQuestionnaireQuestion)
text_answer = models.TextField(blank=True)
answers = models.ManyToManyField(ReportQuestionAnswerChoices)
images = models.ManyToManyField(ReportImage)
answers = (
ReportUserAnswers.objects.filter()
.select_related("question")
.prefetch_related(
"question__answer_choices",
"answers"
)
)
q_answers = [answer for answer in answers if answer.question == question]
```
解决方案
推荐阅读
- python-3.x - Python3 命令永远在 Airflow 中运行
- react-native - IOS 设备不支持 KeyboardAvoidingView
- php - 在选定像素上创建词云
- mysql - Spring Data JPQL 如何使用动态 where 子句创建查询?
- tensorflow - 将学习到的参数转换为 pb 文件
- powershell - 如何阻止我的 youtube-dl 脚本循环播放?
- javascript - 如何将对象的键和值转换为逗号分隔的字符串?
- jquery - 带有历史记录的可链接选项卡 - 后退按钮问题
- driver - Windows 驱动程序:使用命令行工具安装旧版硬件
- php - 如何返回随机键数组?