对于第一个问题--“所有先决条件都已完成的任务”:
>>> Task.objects.exclude(prerequisites__status__in=['A','P','F'])
这还包括没有先决条件的任务(因为它们没有不完整的先决条件)。作为doctest(使用模型定义),通过以下步骤:
>>> a = Task.objects.create(status='C')
>>> b = Task.objects.create(status='A')
>>> b.prerequisites.add(a)
>>> c = Task.objects.create(status='P')
>>> c.prerequisites.add(b)
>>> prerequisites_complete = Task.objects.exclude(prerequisites__status__in=['A','P','F'])
>>> set([t.id for t in prerequisites_complete]) == set([a.id, b.id])
True
这并不能回答每个任务有多少不完整的先决条件——您可能需要这些条件来显示、优化等。