2016-04-11 3 views
1

Я пытаюсь добавить редактируемое поле выбора в django, как картинка, уже проводят некоторые исследования по этому вопросу. К сожалению, такое решение, как django-autocomplete, не вполне удовлетворяет моим потребностям. Автозаполнение выглядит нормально, но если это так, мне нужно создать мода django, чтобы генерировать выбор через запрос просмотра url, но в моем случае это не обязательно делать, мне просто нужно поставить эти 3 варианта для ip-адреса в раскрывающемся списке и выберите один из них, затем отредактируйте его или отправьте.Добавить редактируемый выбор в django

Решения я нашел, но они не очень хорошо подходят мои потребности:

Django admin: Change selected box of related fields to autocomplete

Django editable dropdown field

enter image description here

+0

Я нашел использование jquery-ui autocomplete и вызов ajax для получения параметров (или если вы хотите, чтобы статические параметры могли просто поместить их непосредственно в код автозаполнения javascript), был лучшим способом сделать это. –

ответ

0

Если вы хотите использовать только эти три записи в Самый быстрый способ - использовать datalist, его нужно просто добавить в свой HTML.

<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

Если ваши варианты, вероятно, никогда не изменится, вы могли бы жёстко их в HTML, как в ответе выше. Если вы генерируете ниспадающее меню с помощью формы, однако, было бы лучше, чтобы сделать что-то вроде этого:

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) 
    ... 

После того, как вы предоставляете объект формы в шаблоне он заканчивает продуцирующий HTML, как это:

<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> 

В этом случае легче изменить ip_list в будущем, если вам нужно, а также сохранить весь свой код в одном месте. Это объясняется в документах here.