Мне почему-то вспомнилось про
формсеты.
И ещё деталь: вот этот код (безотносительно формсетов)
@register.assignment_tag(takes_context=True)
def add_mark(context):
mark = Mark.objects.get(pupil=context['pupil'],
lesson=context['lesson'])
form = MarkForm(initial={'value': mark.value},
prefix=mark.id)
return form
лучше переписать вот так:
@register.assignment_tag(takes_context=True)
def add_mark(context):
request = context['request']
mark = Mark.objects.get(pupil=context['pupil'],
lesson=context['lesson'])
form = MarkForm(request.POST or None, prefix=mark.id,
instance=mark)
return form
а именно — передавать в форму связанный с ней объект (аргумент instance). Ну и передавать POST-данные в форму, если они есть.