Django - Получение значения сессии в форму
У меня есть приложение Django и мне нужно получить значение из сессии и поместить его в HiddenInput.
В моем представлении есть такой код:
@login_required(redirect_field_name='login')
def obra_open_view(request, obra_id):
obra = get_object_or_404(Obra, pk=obra_id)
if obra:
request.session['obra_aberta_id'] = obra.id
request.session['obra_aberta_name'] = obra.nome
return redirect('obra_detail_url')
else:
request.session['obra_aberta_id'] = 0
request.session['obra_aberta_name'] = ""
return redirect('obra_lista_url')
Когда у меня есть некоторое значение 'obra_aberta_id', мне нужно поместить это значение в HiddenInput:
class FormCarga(ModelForm):
class Meta:
model = Carga
fields = ('__all__')
widgets = {
'tag': forms.TextInput(attrs={'class': 'form-control'}),
'nome': forms.TextInput(attrs={'class': 'form-control'}),
'descricao': forms.Textarea(attrs={'class': 'form-control'}),
'potencia': forms.TextInput(attrs={'class': 'form-control'}),
'unidade_medida_potencia': forms.Select(attrs={'class': 'form-control'}),
'area': forms.Select(attrs={'class': 'form-control'}),
'tensao': forms.Select(attrs={'class': 'form-control'}),
'fonte': forms.Select(attrs={'class': 'form-control'}),
'atividade': forms.Select(attrs={'class': 'form-control'}),
'fator_potencia': forms.Select(attrs={'class': 'form-control'}),
'condutores_carregados': forms.Select(attrs={'class': 'form-control'}),
'obra': forms.HiddenInput(attrs={'class': 'form-control','initial' : request.session['obra_aberta_id']}),
}
Но я получаю ошибку на 'request': имя 'request' не определено
Как я могу получить значение из сессии e, установленное в этом HiddenInput?
Не знаю, помогут ли модели, но в любом случае вот они:
Пожалуйста, удалите из obra
виджета начальный дикт.
class FormCarga(ModelForm):
class Meta:
model = Carga
widgets = {
'obra': forms.HiddenInput(),
# other staff
}
После этого вы можете сделать:
def carga_new_view(request):
initial={'obra': request.session.get('obra_aberta_id')}
if request.method == 'POST':
form = FormCarga(request.POST, initial=initial)
if form.is_valid():
form.save()
messages.success(request, 'Carga cadastrada com sucesso!')
# Redirect para a lista de cargas
return redirect('carga_list_url')
else:
form = FormCarga(initial=initial)
nome_pagina = 'Nova Carga'
page_dictionary = {
'form': form,
'nome_pagina': nome_pagina,
'editavel': True,
'url_lista': 'carga_list_url',
}
return render(request, 'item.html', page_dictionary)
Но ПОЖАЛУЙСТА прочитайте о Django-GCBV FormView. В вашем случае:
class CargaNewView(FormView):
template = 'item.html'
success_url = 'carga_list_url'
form_class = FormCarga
def get_initial(self, *args, **kwargs):
return super().get_initial(*args, **kwargs) | {'obra': request.session['obra_aberta_id']}
def get_context_data(self, *args, **kwargs):
return super().get_context_data(*args, **kwargs) | {'nome_pagina': 'Nova Carga', 'editavel': True, 'url_lista': self.success_url}
Я прохожу, у вас есть ModelForm. В этом случае вы можете использовать Django-GCBV EditView.
Это мой первый вопрос на StackOverflow. Как я могу пометить свой вопрос как решенный?