我正在尝试将数据从get方法传递到post方法,以便可以通过表单更新数据库数据。在下面的代码中,我专门尝试使用类级别的变量“ saved_objectID”将editObjectID从get方法传递到post方法。但是我总是得到空白值/没有值。
有办法实现吗?预先感谢您的帮助
class EditDataView(ListView):
model =TemporaryModel
form_class = TemporaryForm
template_name = 'frontend/editData.html'
dict = { "EditData":"Edit Data Below"}
saved_objectID = ''
def get(self, request, *args, **kwargs):
editObjectId = request.GET.get('editObjectId')
editObjects = TemporaryModel.objects.get(pk=editObjectId)
saved_objectID = editObjectId
form = TemporaryForm(instance=editObjects)
return render(request, 'frontend/editData.html', {'form': form,"dict":dict})
def post(self, request, *args, **kwargs):
form = TemporaryForm(request.POST, instance=TemporaryModel.objects.get(pk=self.saved_objectID))
if form.is_valid():
form.save()
return render(request, 'frontend/editData.html', {'form': form,"dict":dict})
最佳答案
这取决于您如何部署django应用程序。我想在您的情况下,您的http服务器使用process
来满足用户请求。
因此,两个不同的用户操作get
和post
处于两个不同的进程中,尽管saved_objectID
都是EditDataView
的类成员,但是两个EditDataView
处于两个不同的python进程中。因此,您无法获得价值。
通常,不要使两个不同的请求通过内存中的变量进行通信,即使它可以停留在同一进程中,因为您更改了http服务器部署模式,也仍然无法避免其他干扰(例如,其他用户请求的顺序)。
对于您的情况,为什么不使用saved_objectID
将hidden variable
返回到用户浏览器?或者,如果您关心安全性,则也可以使用redis
,将saved_objectID
作为值存储在redis
中,然后将密钥返回给用户的浏览器。
简而言之,不要使用内存中的变量进行通信,您不能保证在多进程环境中没有任何东西,如果确实需要,可以找到独立的产品。