Как заполнить форму данными, отправленными пользователем после GET-запроса в Django?
def index(request):
if len(request.GET) == 0:
form = FlightSearchForm()
else:
arr = request.GET.get('arrival_airport')
dep = request.GET.get('departure_airport')
form = FlightSearchForm({'departure_airport': dep,'arrival_airport': arr})
return render(request, 'app1/index.html', {'form': form})
Я хочу создать форму, которая позволит пользователям искать рейс, поэтому мне нужно, чтобы они использовали GET-запрос. Проблема в том, что я не знаю, как сделать так, чтобы их поиск отображался в полях после того, как они перейдут по определенному url (со всеми деталями, которые они искали). В прошлом это работало с POST-запросом, но очевидно, что я не могу использовать его в этом случае.
class FlightSearchForm(forms.Form):
def __init__(self, *args, **kwargs):
self.departure_airport = kwargs.pop('departure_airport')
self.arrival_airport = kwargs.pop('arrival_airport')
super.__init__(*args, **kwargs)
departure_airport = forms.CharField(max_length=100)
arrival_airport = forms.CharField(max_length=100)
Я пробовал что-то подобное, но это не помогло. Теперь он кричит, что есть ошибка ключа, которого не существует. Что я могу с этим сделать?
Вы можете сделать форму без лишней логики для departure_airlport
и arrival_airport
, поэтому просто:
class FlightSearchForm(forms.Form):
departure_airport = forms.CharField(max_length=100)
arrival_airport = forms.CharField(max_length=100)
# no __init__
Тогда вы можете использовать данные как initial=…
[Django-doc] data:
def index(request):
if not request.GET:
form = FlightSearchForm()
else:
arr = request.GET.get('arrival_airport')
dep = request.GET.get('departure_airport')
form = FlightSearchForm(initial={'departure_airport': dep,'arrival_airport': arr})
return render(request, 'app1/index.html', {'form': form})
Другой вариант - передать request.GET
непосредственно как данные в форму:
def index(request):
if not request.GET:
form = FlightSearchForm()
else:
form = FlightSearchForm(request.GET)
return render(request, 'app1/index.html', {'form': form})