I'm using Django==4.2 and after using get_object_or_404
function in my view I get an immutable object.
result = get_object_or_404(MyModel, id=id)
And I need to pass this "result" to my form (in post method):
request.POST["result"] = result
However, on post I'm getting this error:
This QueryDict instance is immutable
I've tried to do something like
result = result.copy()
to make it mutable but it didn't work.
So, what should I do to make the "result" mutable, so I can pass it to the form?
Thanks!
In Django, the request.POST QueryDict is immutable by design to prevent accidental modification of form data. If you need to include additional data, including your result object, you should use a different dictionary, such as request.POST.copy() or a new dictionary altogether.
Here's how you can achieve that:
result = get_object_or_404(MyModel, id=id)
# Make a mutable copy of request.POST
mutable_post = request.POST.copy()
# Add your result to the mutable_post dictionary
mutable_post["result"] = result
# Now use the mutable_post dictionary in your form
my_form = MyForm(mutable_post)
This way, you're not modifying the original request.POST but creating a mutable copy and adding your result to it.
Make sure to handle the form validation and processing appropriately after creating the form instance.