Поиск в форме ForeignKey по тексту в отличие от выпадающего списка - Django

Я работаю над сайтом бронирования авиабилетов на Django. В моем models.py у меня есть две модели; одна называется Airport и одна называется Flight. Класс Flight имеет две переменные 'Departure' и 'Destination', которые наследуются от класса Airport через ForeignKey. В конечном итоге, я хочу, чтобы пользователь мог выбрать аэропорт отправления и аэропорт назначения. Сейчас я ограничен выпадающей опцией при попытке выбора аэропортов. Может ли кто-нибудь объяснить, как можно отредактировать мою форму, чтобы пользователь мог ввести название аэропорта, и сохраненные значения появятся на основе поиска пользователя. (Например: пользователь вводит "los" и появляется "Los Angeles", который можно выбрать.

Models.py

from django.db import models

class Airport(models.Model):
    city = models.CharField(max_length=50)
    code = models.CharField(max_length=3)

    def __str__(self):
        return f"{self.city} ({self.code})"

class Flight(models.Model):
    origin = models.ForeignKey(Airport, on_delete=models.CASCADE, related_name="origin")
    destination = models.ForeignKey(Airport, on_delete=models.CASCADE, related_name="destination")
    length = models.IntegerField(null=False)

    def __str__(self):
        return f"{self.id} - {self.origin} to {self.destination}"

Ниже, в моем файле forms.py, я добавил виджет dict, который позволил мне теперь вводить значение в форму вместо выпадающего меню. Однако он не предлагает результаты, основанные на поиске, и не подсказывает ни один из сохраненных аэропортов.

Forms.py

from django import forms
from .models import Airport, Flight
from django.forms import CharField


class citySearch(forms.ModelForm):
    class Meta:
        model = Flight
        fields = ['origin', 'destination']
        widgets = {
            "origin": forms.TextInput,
            "destination": forms.TextInput
        }

Ниже, в моем файле views.py; я знаю, что здесь есть странный код, но я оставляю его, чтобы не было "ошибок".

views.py

from django.shortcuts import render
from .models import Airport, Flight
from .forms import citySearch

def index(request):
    airports = Airport.objects.all()
    context ={
        "airports": airports,
    }
    return render(request, "base/index.html" , context)


def book(request):
    form = citySearch()
    context = {
        "form": form,
    }
    if request.method == 'POST':
        form = citySearch(request.POST)
        if form.is_valid():
            form.save()
        context = {"form": form}
    return render(request, "base/book.html" , context)

Последним является мой HTML файл. Просто добавляю его на всякий случай!

index.html

<!DOCTYPE html>
<html>
    <head>
        <title> Flights </title>
    </head>
    <body>
        <form method='POST' action="{% url 'book' %}"> {% csrf_token %}
            <p>{{ form }}</p>

            <input type="submit" value ='Search'/>
        </form>
        <h3> Finding flights</h3>
        <h1> from {{ departure }} to {{destination}}</h1>
    </body>
</html>

Надеюсь, это было понятно. Я не думал, что это будет так сложно.

Мне кажется, что я перепробовал все, но опять же все, что я просмотрел, было разным и трудно применимо к моему конкретному случаю.

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