Django:如何从 django 中的 get_object_or_404 获取可变对象?

问题描述 投票:0回答:1

我正在使用 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 django-models django-views django-forms
1个回答
0
投票

在 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,而是创建一个可变副本并将结果添加到其中。

确保在创建表单实例后正确处理表单验证和处理。

© www.soinside.com 2019 - 2024. All rights reserved.