Django получает данные из метода get и передает метод post - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь передать данные из метода get в метод post, чтобы я мог обновить данные своей базы данных через форму. В приведенном ниже коде, в частности, я попытался использовать переменную уровня класса «сохраненный_объект» для передачи 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 голосов
/ 31 августа 2018

Это зависит от того, как вы развернете свое приложение django. Я полагаю, в вашем случае ваш http-сервер использует process для обслуживания пользовательских запросов.

Итак, два разных действия пользователя get & post находятся в двух разных процессах, хотя saved_objectID оба являются членами класса EditDataView, но два EditDataView в двух разных процессах python. Таким образом, вы не можете получить значение.

Как правило, не заставляйте два разных запроса обмениваться данными с помощью переменной в памяти, даже если она может оставаться в одном и том же процессе, поскольку при изменении режима развертывания http-сервера вы по-прежнему не можете использовать другие источники помех (например, последовательность запросов другого пользователя) ).

Для вашего сценария, почему бы просто не вернуть saved_objectID в браузер пользователя, используя hidden variable? Или, если вы заботитесь о безопасности, вы также можете использовать redis, сохранить saved_objectID в качестве значения в redis и вернуть ключ в браузер пользователя.

Одним словом, не используйте переменную в памяти для общения, вы ничего не можете гарантировать в многопроцессорной среде, найдите автономный продукт, если он вам действительно нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...