Что касается неизменной ошибки QueryDict, ваша проблема почти наверняка состоит в том, что вы создали свой экземпляр формы следующим образом:
form = MyForm(request.POST)
Это означает, что form.data является фактическим QueryDict, созданным из переменных POST. Поскольку сам запрос является неизменным, вы получаете сообщение об ошибке, когда пытаетесь что-либо изменить в нем. В этом случае, говоря
form.data['field'] = None
точно так же, как
request.POST['field'] = None
Чтобы получить форму, которую вы можете изменить, вы хотите построить ее следующим образом:
form = MyForm(request.POST.copy())