python - 使用 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)
解决方案
您可以使用 Django ORM 的强大功能来做到这一点:
activity_count = (StudentActivity.objects
.exclude(related_class=None) # exclude not linked activities
.count() # count unique items
)
这段代码我没有测试过,请自己做。
推荐阅读
- java - 如何使用 Spring Security 与节点身份验证服务器通信来保护 Java REST API(内部使用 AWS cognito)
- mysql - 从多个sql表中查询数据
- c++ - 如何检查使用的 c++ 编译器 VS 2019 的版本?
- react-native - TypeOrm + Sqlite 仅在开发中有效 [React Native + Expo]
- javascript - window.addEventListener('unload', fermPage()); 不工作?
- android - 仅当来自实时数据库的值等于 X 时,如何执行 Firebase 计划功能?
- angular - 输入 Angular 组件抛出错误
- json - 使用 javascript 编辑 json 文件
- sql - 从 Amazon Redshift 中的 json 数组中提取特定键
- javascript - 未捕获的类型错误:表单为空