鉴于这些 Django 模型:
class Job(models.Model):
pass
class Task(models.Model):
job = models.ForeignKey('Job', related_name='tasks')
status = models.CharField(choices=TaskStatus.CHOICES, max_length=30)
dependencies = models.ManyToManyField("self", related_name="dependents", symmetrical=False)
Run Code Online (Sandbox Code Playgroud)
我想查询单个作业的所有状态为“待处理”的任务以及状态为“已完成”的所有依赖项。
我编写了以下查询,但它返回至少具有一个依赖项且状态已完成的任务,这显然不是我想要的。
tasks_that_can_be_executed = Task.objects.filter(
job__pk=job_id,
status=TaskStatus.PENDING,
dependencies__status=TaskStatus.COMPLETED
)
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
from django.db.models import IntegerField, Case, When, Count, Q
Task.objects.filter(
job=job,
status=TaskStatus.PENDING,
).annotate(
not_completed_dependencies_count=Count(
Case(When(~Q(dependencies__status=TaskStatus.COMPLETED), then=1),
output_field=IntegerField(),
)
)
).filter(
not_completed_dependencies_count__gt=0
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2764 次 |
| 最近记录: |