.save() 関数がそのフローを終了する前に、ビューは何も返すべきではありません。
フロー自体については、Django のドキュメントでかなり明示的に宣言されています。
オブジェクトを保存すると、Django は次の手順を実行します。
1)プリセーブ信号を発します。シグナル django.db.models.signals.pre_save が送信され、そのシグナルをリッスンするすべての関数がカスタマイズされたアクションを実行できるようになります。
2)データを前処理します。オブジェクトの各フィールドは、フィールドが実行する必要がある自動化されたデータ変更を実行するよう求められます。
ほとんどのフィールドは前処理を行わず、フィールド データはそのまま保持されます。前処理は、特別な動作を持つフィールドでのみ使用されます。たとえば、モデルに auto_now=True の DateField がある場合、事前保存フェーズはオブジェクトのデータを変更して、日付フィールドに現在の日付スタンプが含まれるようにします。(私たちのドキュメントには、この「特別な動作」を持つすべてのフィールドのリストはまだ含まれていません。)
3)データベースのデータを準備します。各フィールドは、データベースに書き込むことができるデータ型で現在の値を提供するよう求められます。
ほとんどのフィールドでは、データの準備は必要ありません。整数や文字列などの単純なデータ型は、Python オブジェクトとして「すぐに書き込む」ことができます。ただし、より複雑なデータ型では、多くの場合、何らかの変更が必要になります。
たとえば、DateField フィールドは Python の datetime オブジェクトを使用してデータを格納します。データベースには日時オブジェクトが保存されないため、データベースに挿入するには、フィールド値を ISO 準拠の日付文字列に変換する必要があります。
4)データをデータベースに挿入します。前処理され、準備されたデータは、データベースに挿入するための SQL ステートメントに構成されます。
5)保存後の信号を送信します。シグナル django.db.models.signals.post_save が送信され、そのシグナルをリッスンするすべての関数がカスタマイズされたアクションを実行できるようになります。
ビューにデコレータを適用した場合、受け取っている動作が可能であることに注意してください。@transaction.commit_on_success
ただし、コードには表示されません。
トランザクションの詳細: https://docs.djangoproject.com/en/1.5/topics/db/transactions/