Получение значения сессии из формы 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
Надеюсь, это будет полезно для вас.