Использование self.requests.session в forms.ModelForm
Я прочитал Django - Доступ к request.session в форме, но все еще в полном замешательстве.
Я хочу, чтобы значение по умолчанию в одном из полей моей формы было из self.requests.session
(я также пробовал requests.session
).
class BookARoomForm(forms.ModelForm):
def __init__(self, request, *args, **kwargs):
super(BookARoomForm, self).__init__(*args, **kwargs)
self.fields['arrival_date'].initial = self.requests.session['arrival_date']
class Meta:
model = RoomBooking
fields = ('User', 'title', 'room_type', 'arrival_date', 'departure_date', 'cost')
В get_context_data
я пробовал context['book_a_room_form'] = BookARoomForm()
, context['book_a_room_form'] = BookARoomForm(request)
и context['book_a_room_form'] = BookARoomForm(self.request)
. Каждый раз я получал разные ошибки.
class HotelDetailSlugView(ObjectViewedMixin, DetailView):
template_name = "hotel/detail.html"
def get_context_data(self, *args, **kwargs):
context = super(HotelDetailSlugView, self).get_context_data(*args, **kwargs)
context['book_a_room_form'] = BookARoomForm() # Your part form
Чтобы добавить значение по умолчанию в форму в Django Class Based View, инстанцируйте форму в методе get
вместо get_context_data
вот так :
class HotelDetailSlugView(ObjectViewedMixin, DetailView):
template_name = "hotel/detail.html"
def get(self, request, *args, **kwargs):
# This code is executed each time a GET request is coming on this view
# It's is the best place where a form can be instantiate
form = BookARoomForm(initial={'arrival_date': request.session['arrival_date']})
return render(request, self.template_name, {'form': form})
ЗАМЕЧАНИЕ ВСЕГО : в вашем __init__
методе BookARomForm, вы делаете опечатку ;
обычно строка должна быть self.fields['arrival_date'].initial = request.session['arrival_date']
. Это request.session, а не requests.session (окончания s
на request не должно быть)