Передача данных формы для просмотра - PullRequest
0 голосов
/ 20 марта 2020

У меня есть следующее представление:

views.py

def PackingListView(request):
    if request.method == "POST":
        form = PackingListForm(request.POST)
        if form.is_valid():
            if 'preview' in request.POST:
                request.session['data'] = form.cleaned_data
                return redirect('myview')
  ....

Я хотел бы взять данные в form и передать их следующему представлению и установить data переменная равна ему. Ранее это работало, но как только я добавил внешний ключ в эту форму, сеанс больше не работает, поскольку он не сериализуем. Какой подход является наиболее безопасным для меня здесь?

views.py

class myview(View):
    def get(self, request, *args, **kwargs):

        data = request.session.pop('data', {})#this won't work  now

        pdf = render_to_pdf('packlist_preview.html', data)
        return HttpResponse(pdf, content_type='application/pdf')

Кроме того, на случай, если это необходимо - вот URL для myview

url(r'^myview/', views.myview.as_view(), name='myview'),

1 Ответ

1 голос
/ 20 марта 2020

Вы сможете сериализовать данные, если замените экземпляр модели его идентификатором.

data = form.cleaned_data
# remove object from data dict
related_object = data.pop('related_object')
# add in a reference
data['related_object_id'] = related_object.pk
# now you should be able to serialize object
request.session['data'] = data

Затем в следующем представлении вы можете получить объект из базы данных, используя его идентификатор

data = request.session.pop('data', {})
related_object_id = data.pop('related_object_id', None)
if related_object_id:
    try:
        data['related_object'] = RelatedObject.objects.get(pk=related_object_id)
    except RelatedObject.DoesNotExist:
        pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...