Django从get方法获取数据并传递给post方法

时间:2018-08-31 05:16:14

标签: python django post get

我正在尝试将数据从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})

1 个答案:

答案 0 :(得分:2)

这取决于您部署django应用程序的方式。我想在您的情况下,您的http服务器使用process来满足用户请求。

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

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

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

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