You may want to consider using one of the generic editing views for this:
https://docs.djangoproject.com/en/dev/ref/class-based-views/