python - 获取跨越关系的对象的计数
问题描述
我正在尝试计算跨越关系的对象。每个 TestPlan 包含 n 个案例。方法 plan_case_count() 给了我计数。每个 TestPlanCase 包含 n 个步骤。我想获得与该计划相关的所有案例的所有步骤的总数。方法 plan_case_step_count() 应该通过遍历查询集并累加计数来做到这一点。但它不起作用。我得到的错误信息是:
“RelatedManager”对象没有属性“testplanstep_set”
class TestPlan(models.Model):
tp_title = models.CharField(max_length=200)
tp_version = models.IntegerField()
tp_date = models.DateField(default=timezone.now)
def plan_case_count(self):
"""This one works"""
return self.testplancase_set.count()
def plan_case_step_count(self):
"""This one doesn't"""
pcs_count = 0
for case in self.testplancase_set:
pcs_count += case.testplanstep_set.count()
return pcs_count
class TestPlanCase(models.Model):
tpc_plan = models.ForeignKey(TestPlan, on_delete=models.CASCADE)
tpc_case = models.ForeignKey(TestCase, on_delete=models.CASCADE)
tpc_seq_no = models.IntegerField(default=1)
class TestPlanStep(models.Model):
tps_case = models.ForeignKey(TestPlanCase, on_delete=models.CASCADE)
tps_step = models.ForeignKey(TestSteps, on_delete=models.CASCADE)
tps_ok = models.CharField(max_length=4, choices=Choices.yes_no)
tps_issue = models.CharField(max_length=200, blank=True)
我究竟做错了什么?
解决方案
请直接写计数查询:
def plan_case_step_count(self):
return TestPlanStep.objects.filter(tps_case__tpc_plan=self).count()
这将COUNT(*)
直接在 SQL 中使用JOIN
.
推荐阅读
- python - 在 python 类中使用队列 - ''function' 对象不可下标
- haskell - 习惯性地在链的末尾返回一个 Maybe
- java - 错误:W/ConnectionTracker:解除绑定 java.lang.IllegalArgumentException 时引发异常:服务未注册:lt@ad6f640
- raspberry-pi - Raspberry Pi 和 ESP32 - 快速实时 wifi 连接
- html - html 和 thymeleaf 无法与 html 页面上的 svg 元素一起正常工作
- delphi - E2134 使用运行时类型信息构建时 Turbopower LockBox 代码出错
- qt - QML/Qt:根据包含它的父级使显示的文本尽可能大
- c++ - Windows 调试器上的 VS Code 不适用于 freopen
- python - 如何为 django 日期时间模型字段设置默认值和 auto_now 值
- algorithm - Hackerrank 子数组求和问题 - 超时测试用例