Использование 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 не должно быть)

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