2016-04-11 14 views
1

Ich versuche, ein editierbares Choicefield in Django wie das Bild hinzuzufügen, bereits einige Nachforschungen darüber. Leider erfüllt die Lösung wie django-autocomplete meine Bedürfnisse nicht ganz. Die Autocomplete sieht gut aus, aber wenn dies der Fall ist, muss ich ein Django-Modal erstellen, um die Auswahlmöglichkeiten über eine URL-View-Anfrage zu generieren. In meinem Fall ist es jedoch nicht nötig, diese drei Optionen für die IP-Adresse anzugeben in der Dropdown-Liste, und wählen Sie eine von ihnen, dann bearbeiten oder senden.Editierbare Auswahl in django hinzufügen

Die Lösungen fand ich, aber sie sind nicht sehr gut mein Bedürfnis passen:

Django admin: Change selected box of related fields to autocomplete

Django editable dropdown field

enter image description here

+0

Ich fand mit jquery-ui Autocomplete und einem Ajax-Aufruf, um die Optionen (oder wenn Sie statische Optionen, können Sie nur direkt in den Autocomplete JavaScript-Code setzen) war der beste Weg, dies zu tun. –

Antwort

0

Wenn Sie verwenden möchten nur diese drei Einträge, die Der schnellste Weg ist die Verwendung eines datalist, es muss nur irgendwo in Ihrem HTML hinzugefügt werden.

<div id="page-wrapper"> 
 
    <label for="ip">Network address</label> 
 
    <input type="text" id="ip" list="ip-datalist"> 
 
    <datalist id="ip-datalist"> 
 
     <option>192.168.0.0/24</option> 
 
     <option>10.0.0.0/24</option> 
 
     <option>172.16.0.0/24</option> 
 
    </datalist> 
 
</div>

0

Wenn Ihre Optionen sind wahrscheinlich nie zu ändern, können Sie sie in Ihre html wie die oben genannte Antwort codieren. Wenn Sie Ihre Drop-Down sind Generierung über ein Formular aber es wäre besser, so etwas zu tun:

class MyForm(forms.Form): 

    ip_list = ((1, '192.168.0.0/24'), (2, '10.0.0.0/24'), 
     (3, '172.16.0.0/24'),) 

    network_address = forms.ChoiceField(label='Network Address', 
     choices=ip_list) 
    ... 

Sobald Sie das Formular-Objekt in Ihrer Vorlage machen es endet Herstellung html wie folgt aus:

<label for="id_network_address">Network Address:</label> 
<select id="id_network_address" name="network_address"> 
    <option value="1">192.168.0.0/24</option> 
    <option value="2">10.0.0.0/24</option> 
    <option value="3">172.16.0.0/24</option> 
</select> 

Auf diese Weise ist es leichter, die ip_list in Zukunft zu ändern, wenn Sie müssen, und es hält alle Ihren Code an einem Ort. Dies wird in der Dokumentation erläutert.