Получение значения сессии из формы django

У меня есть 2 формы, одна из которых является основной, а другая открывается в модальном окне. Мне нужно, чтобы моя вторая форма получала значение сессии компании (AIGN_EMP_ID), однако я не знаю, как отправить это значение при вызове моей формы из Context.

Первая форма.py

Вторая форма.py

request.session.AIGN_EMP_ID - это значение, которое я хочу получить, суть в том, чтобы получить значение сессии из моей второй формы

view.py

import django
from django.db import connection
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from django.views.generic import FormView
from appls.con_man.forms import MayoresForm, get_MayoresDetForm, MayoresPrintForm
from vars import rs


class Con_MayoresCreateView(FormView):
    form_class = MayoresForm
    template_name = 'con_reportes/form_mayores.html'
    success_url = reverse_lazy('con_man:con_mayores_rep')

    # Asigna al kwargs la variable de session desde el formulario
    def get_form_kwargs(self):
        kwargs = super(Con_MayoresCreateView, self).get_form_kwargs()
        kwargs.update({'AIGN_EMP_ID': self.request.session['AIGN_EMP_ID']})
        kwargs.update({'AIGN_OPCIONES': self.request.session['AIGN_OPCIONES']})
        return kwargs

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        extra_errors = []
        request.POST._mutable = True
        ctxt = {}
        print(request.POST)
        if 'PRINT' in request.POST:
            mayores_form = MayoresPrintForm(request.POST)
            if mayores_form.is_valid():
                url = rs.ELEMENTS
                url.ID = rs.REP_CON_MOVIMIENTOCUE_RANGO_ID
                url.PARAMETROS = {'p_per_id': self.request.session['AIGN_PER_ID'],
                                  'p_cue_codigov_d': mayores_form.data['act_cuenta_ini'],
                                  'p_cue_codigov_h': mayores_form.data['act_cuenta_fin'],
                                  'p_fecha_desde': mayores_form.data['act_fechaini'],
                                  'p_fecha_hasta': mayores_form.data['act_fechafin']
                                  }
                r = url.getURL(url)
                return redirect(r)
            else:
                ctxt['mayores_form'] = mayores_form
        if 'CREATE' in request.POST:
            try:
                context = self.get_context_data(per_id=self.request.session['AIGN_PER_ID'],
                                                cue_id=form.data['act_cuenta'],
                                                f_ini=form.data['act_fechaini'],
                                                f_fin=form.data['act_fechafin'],
                                                **kwargs)
                return render(request, self.template_name, context)
            except django.db.utils.InternalError as e:
                extra_errors.append(str(e))
        return render(request, self.template_name, self.get_context_data(**ctxt))

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['page_title'] = 'Mayores'
        context['url_list'] = self.success_url
        context['MayoresPrintForm'] = MayoresPrintForm()
        ret = []
        ret.append(get_MayoresDetForm(kwargs).to_JSON())
        context['grids_detalles'] = ret
        return context

context['MayoresPrintForm'] = MayoresPrintForm() - это место, куда мне нужно отправить значение моей сессии.

template.html

Я буду очень признателен, если вы поможете мне с любыми предложениями.

В настоящее время наши элементы управления Syncfusion не поддерживают ваши требования.

Приветствую,

Гокул

Я нашел решение, хотя и не знаю, правильный ли это способ.

В get_context я могу послать переменную data со значением session MayoresPrintForm(data=self.request.session)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['page_title'] = 'Mayores'
        context['url_list'] = self.success_url
        context['MayoresPrintForm'] = MayoresPrintForm(data=self.request.session)
        ret = []
        ret.append(get_MayoresDetForm(kwargs).to_JSON())
        context['grids_detalles'] = ret
        return context

Но мне пришлось изменить метод Post, чтобы получить оттуда значения формы следующим образом: request.POST['act_cuenta_ini']

Вот окончательный код:

import django
from django.db import connection
from django.shortcuts import render, redirect
from django.urls import reverse_lazy
from django.views.generic import FormView
from appls.con_man.forms import MayoresForm, get_MayoresDetForm, MayoresPrintForm
from vars import rs


class Con_MayoresCreateView(FormView):
    form_class = MayoresForm
    second_form_class = MayoresPrintForm
    template_name = 'con_reportes/form_mayores.html'
    success_url = reverse_lazy('con_man:con_mayores_rep')

    # Asigna al kwargs la variable de session desde el formulario
    def get_form_kwargs(self):
        kwargs = super(Con_MayoresCreateView, self).get_form_kwargs()
        kwargs.update({'AIGN_EMP_ID': self.request.session['AIGN_EMP_ID']})
        kwargs.update({'AIGN_OPCIONES': self.request.session['AIGN_OPCIONES']})
        return kwargs

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        extra_errors = []
        request.POST._mutable = True
        if 'PRINT' in request.POST:
            url = rs.ELEMENTS
            url.ID = rs.REP_CON_MOVIMIENTOCUE_RANGO_ID
            url.PARAMETROS = {'p_per_id': self.request.session['AIGN_PER_ID'],
                              'p_cue_codigov_d': request.POST['act_cuenta_ini'],
                              'p_cue_codigov_h': request.POST['act_cuenta_fin'],
                              'p_fecha_desde': request.POST['act_fechaini'],
                              'p_fecha_hasta': request.POST['act_fechafin']
                              }
            r = url.getURL(url)
            return redirect(r)

        if 'CREATE' in request.POST:
            try:
                context = self.get_context_data(per_id=self.request.session['AIGN_PER_ID'],
                                                cue_id=form.data['act_cuenta'],
                                                f_ini=form.data['act_fechaini'],
                                                f_fin=form.data['act_fechafin'],
                                                **kwargs)
                return render(request, self.template_name, context)
            except django.db.utils.InternalError as e:
                extra_errors.append(str(e))
        return render(request, self.template_name, self.get_context_data(context))

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['page_title'] = 'Mayores'
        context['url_list'] = self.success_url
        context['MayoresPrintForm'] = MayoresPrintForm(data=self.request.session)
        ret = []
        ret.append(get_MayoresDetForm(kwargs).to_JSON())
        context['grids_detalles'] = ret
        return context

Надеюсь, это будет полезно для вас.

Вернуться на верх