Как заполнить форму данными, отправленными пользователем после 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})
Вернуться на верх