我正在尝试将数据从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来满足用户请求。

因此,两个不同的用户操作getpost处于两个不同的进程中,尽管saved_objectID都是EditDataView的类成员,但是两个EditDataView处于两个不同的python进程中。因此,您无法获得价值。

通常,不要使两个不同的请求通过内存中的变量进行通信,即使它可以停留在同一进程中,因为您更改了http服务器部署模式,也仍然无法避免其他干扰(例如,其他用户请求的顺序)。

对于您的情况,为什么不使用saved_objectIDhidden variable返回到用户浏览器?或者,如果您关心安全性,则也可以使用redis,将saved_objectID作为值存储在redis中,然后将密钥返回给用户的浏览器。

简而言之,不要使用内存中的变量进行通信,您不能保证在多进程环境中没有任何东西,如果确实需要,可以找到独立的产品。

10-08 00:58