request.session['foo'].append('bar')
セッションには影響しません。request.session['...'] = ...
/セッションのみdel request.session['...']
に影響します。
次のコードを試してください。
request.session['foo'] = ['bar']
https://docs.djangoproject.com/en/dev/topics/http/sessions/#when-sessions-are-saved
デフォルトでは、Django はセッションが変更された場合 (つまり、辞書の値のいずれかが割り当てられているか削除されている場合) にのみセッション データベースに保存します。
# Session is modified.
request.session['foo'] = 'bar'
# Session is modified.
del request.session['foo']
# Session is modified.
request.session['foo'] = {}
# Gotcha: Session is NOT modified, because this alters
# request.session['foo'] instead of request.session.
request.session['foo']['bar'] = 'baz'
上記の例の最後のケースでは、セッション オブジェクトに modified 属性を設定することで、セッション オブジェクトが変更されたことを明示的に伝えることができます。
request.session.modified = True
...