我正在使用 Django==4.2,在我看来使用
get_object_or_404
函数后,我得到了一个不可变的对象。
result = get_object_or_404(MyModel, id=id)
我需要将此“结果”传递到我的表单(在 post 方法中):
request.POST["result"] = result
但是,在发布时我收到此错误:
This QueryDict instance is immutable
我尝试过做类似的事情
result = result.copy()
使其可变,但没有成功。
那么,我应该怎么做才能使“结果”可变,以便我可以将其传递给表单?
谢谢!
在 Django 中,request.POST QueryDict 在设计上是不可变的,以防止表单数据的意外修改。如果您需要包含其他数据,包括结果对象,您应该使用不同的字典,例如 request.POST.copy() 或完全使用新字典。
以下是实现这一目标的方法:
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)
这样,您就不会修改原始请求。POST,而是创建一个可变副本并将结果添加到其中。
确保在创建表单实例后正确处理表单验证和处理。