首页 > 解决方案 > 使用 for 循环获取 django 查询集上唯一值的 COUNT

问题描述

新手在 django 和 django-rest-framework 上。请问是否可以在 for 循环中获取唯一值的 COUNT ?我遇到了这个用例,我需要在 for 循环查询集上获取所有唯一值的 COUNT。实现是在查询集中循环并将所有唯一对象放在列表中并返回它的 len()。这个实现的问题是它会导致基于 django-debug-toolbar 的数据库上的多个查询。请参阅下面的代码以供参考。还有其他方法可以实现吗?先感谢您。

activity_list = []

classes = Class.objects.all()

for class in classes:
    student_activities = class.studentactivity_set.all()

    for activity in student_activities:
        if activity not in activity_list:
            activity_list.append(activity)

return len(activity_list)

标签: pythondjangodjango-rest-frameworkdjango-queryset

解决方案


您可以使用 Django ORM 的强大功能来做到这一点:

activity_count = (StudentActivity.objects
  .exclude(related_class=None) # exclude not linked activities
  .count() # count unique items
)

这段代码我没有测试过,请自己做。


推荐阅读