2009-05-30 6 views
2

Ich habe drei Dropdown-Auswahlfelder, die ich aus Gründen der Websichtbarkeit erweitern muss, mit der Option size = ''. Wenn ich eine Option aus jeder Box wählen erhalte ich keine Fehler, aber wenn ich verlassen eine oder mehr Boxen ohne Auswahl, erhalte ich eine Fehlermeldung:Django wählen Boxgröße Option

<select id="pathology_id" name="pathology_id" size="5"> 
    {% for pathology in pathology_list %} 
    <option value="{{ pathology.id }}">{{ pathology.pathology }}</option> 
    {% endfor %} 
</select> 

<select id="commodity_id" name="commodity_id" size="5"> 
    {% for commodity in commodity_list %} 
    <option value="{{ commodity.id }}">{{ commodity.commodity }}</option> 
    {% endfor %} 
</select> 

<select id="technology_id" name="technology_id" size="5"> 
    {% for technology in technology_list %} 
    <option value="{{ technology.id }}">{{ technology.technology }}</option> 
    {% endfor %} 
</select> 

ERROR: 
MultiValueDictKeyError 
Exception Value:  

"Key 'pathology_id' not found in <QueryDict: {u'q': [u''], 

Wie die Ansicht auf Code, um ein Drop-Down-Box, die nicht zu akzeptieren Auswahl?

Antwort

1

Sie können die for-Schleifen mit einer if-Anweisung umgeben, wenn eine Ihrer Listen leer ist.

Zum Beispiel

{% if technology_list %} 
    {% for technology in technology_list %} {{ technology.technology }} {% endfor %} 
{% endif %} 

schließlich in der Ansicht können Sie überprüfen die gepostete Artikel ist in der Anfrage Wörterbuch zu sehen.

if 'technology' in request.POST: 
    tech = request.POST['technology'] 

----- aktualisieren -----

Zunächst einmal sollten Sie wahrscheinlich django forms verwenden, dies zu tun. Zweitens sollten Sie stackoverflow verwenden, um bestimmte Fragen zu stellen. Sie sollten es nicht als eine Methode verwenden, um Ihren Code zu reparieren.

Schließlich scheint der Fehler für die folgende Zeile geworfen zu werden:

pathology_id = request.GET['pathology_id'] 

Das Problem ist, dass der Schlüssel ‚pathology_id‘ nicht innerhalb des GET-Wörterbuch ist. Wenn Sie einen Standardwert für dieses Feld haben, können Sie etwas tun:

pathology_id = 'default_value' 
if 'pathology_id' in request.GET: 
    pathology_id = request.GET['pathology_id'] 

Andernfalls, wenn Sie nicht über einen Standardwert haben, können Sie offensichtlich keine Pathologie Objekt ohne eine ID erhalten. Sie müssen dann den Fall behandeln, wenn nichts ausgewählt ist.

if 'pathology_id' in request.GET: 
    pathology_id = request.GET['pathology_id'] 

    #rest of your code 

else: 
    #code when no pathology_id is selected