Beste Weg, um ein Modell suchen-Formular?

Ich habe dieses Modell:

class Aircraft(models.Model):
    model       =   models.CharField(max_length=64, blank=True)
    type        =   models.CharField(max_length=32)
    extra       =   models.CharField(max_length=32, blank=True)
    manufacturer    =   models.CharField(max_length=32)
    engine_type =   models.IntegerField("Engine Type", choices=ENGINE_TYPE, default=0)
    cat_class   =   models.IntegerField("Category/Class", choices=CAT_CLASSES, default=1)

Und ich habe eine "Suche Flugzeuge" Seite, wo der Benutzer ein Formular, in das Sie Daten eingeben können, die werden verwendet, um alle Flugzeuge, die genau auf Ihre Kriterien. Zum Beispiel kann der Benutzer geben Sie "boeing" in ein Textfeld und "jet" in die engine_type box, und es wird alle boeing-jets in der Datenbank. Die Art, wie ich bin, dies jetzt zu tun, ist von dieser form:

class AircraftSearch(ModelForm):
    search = forms.CharField(max_length=100, required=False)
    class Meta:
        model = Aircraft
        fields = ('engine_type', 'cat_class', )

Und dann eine (unnötig Komplex) Blick wandelt die Daten aus diesem Formular in eine Reihe von filter()'s Hinzugefügt Aircraft.objects.all(). (Anstatt 4 getrennte Suchfelder für jeden CharField, ich kombiniert haben Sie alle in ein Suche-Feld).

Das alles funktioniert, aber mit einem problem. Wenn der Nutzer will, um auszuschließen, Motortyp von Ihren Suchkriterien, dann sind Sie verschraubt, da "Jeder" ist keine gültige Wahl für den Motor-Typ-Feld. Ich bin zu haben, um ein neues Feld anlegen/widget für Motor Typ und Kategorie/Klasse zu gehören "Alle", die Art von Niederlagen der Zweck der Verwendung eines Modells anzeigen in den ersten Platz

Bin ich mal gespannt. Gibt es einen besseren Weg? Dies scheint eine sehr häufige Aufgabe, die gelöst wurden, indem jemand anderes schon, aber eine google-Suche bringt nichts.

InformationsquelleAutor priestc | 2009-07-10
Schreibe einen Kommentar