Вероятно, лучше всего реализовать иерархию задач, указав родительский объекта задачи для объекта задачи или объекта проекта, к которому он принадлежит.
Я думаю, что хитрость для определения того, завершены ли все дочерние элементы проекта или нет, заключается в использовании запросов ANCESTOR.
Если вы создаете записи своей задачи таким образом, чтобы их родительский элемент был установлен на задачу или проект, к которому они принадлежат, вы сможете написать что-то вроде этого:
all_done = db.Query().ancestor(project_entity).filter('complete = ', False).count()
if all_done > 0:
#Not all done
else:
#All done