首页 > 解决方案 > 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]
```

标签: arraysdjangodjango-queryset

解决方案


推荐阅读