我正在尝试将数据从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})
答案 0 :(得分:2)
这取决于您部署django应用程序的方式。我想在您的情况下,您的http服务器使用process
来满足用户请求。
因此,两个不同的用户操作get
和post
处于两个不同的过程中,尽管saved_objectID
都是EditDataView
的类成员,但是两个{{ 1}}在两个不同的python进程中。因此,您无法获得价值。
通常,不要使两个不同的请求通过内存中的变量进行通信,即使它可以停留在同一进程中,因为您更改了http服务器部署模式,仍然无法避免其他干扰(例如,其他用户请求的顺序) )。
对于您的情况,为什么不只使用EditDataView
将saved_objectID
返回给用户浏览器呢?或者,如果您关心安全性,也可以使用hidden variable
,将redis
作为值存储在saved_objectID
中,然后将密钥返回给用户的浏览器。
总而言之,不要使用内存中的变量进行通信,您不能保证在多进程环境中没有任何东西,如果确实需要,可以找到一个独立的产品。