How to update a plan after it is in use, plus when to update the team template instead.
A macrocycle plan exists at two possible scopes (see Macrocycle plan basics):
is_template=True, team set).parent_template link pointing back to a team template).Edits at each scope have different consequences. Decide which you want to change before you start editing.
Edit the team template when the change should apply to every athlete on the team. Examples:
How to edit:
/admin/core/macrocycleplan/<id>/change/).config_json (or any other field).After save (before re-deploy), derived plans get marked
is_stale=True to flag that the parent template moved.
Edit a derived plan when the change is specific to that athlete and should not be pushed back to the template. Examples:
How to edit:
config_json directly.The change applies immediately to that athlete only. The team template is untouched, and other derived plans are untouched.
Replace the plan entirely when:
To replace, create a new MacrocyclePlan record and archive the
old one (set status to archived). The old plan stays in
history.
You don't have to touch Django admin. Open the ATP Builder for the athlete (from their Annual / ATP page), adjust the plan, and use the two buttons at the bottom:
Two conveniences in the builder's race picker: it lists only the athlete's upcoming races (a past race can't anchor a forward plan), and picking the A-race auto-fills the training-block End date to the day after race day โ edit it if you want a different boundary.
Still stuck? Ask us a question and we'll write up an answer.
Ask a question