django - вставить пользовательский параметр в оператор выбора, который автоматически генерируется из таблицы базы данных - PullRequest
0 голосов
/ 30 января 2011

У меня есть выпадающая (выберите) форма, которая тянет опции выбора из таблицы базы данных.Параметры меняются почти все время в зависимости от определенной переменной.

Мне нужно добавить еще одну опцию до конца раскрывающегося списка, которая всегда будет одинаковой.Что-то, что скажет «больше вариантов».Есть идеи?Спасибо!

Ответы [ 2 ]

2 голосов
/ 31 января 2011

Это достаточно просто сделать, переопределив __init__ в подклассе формы, который вы используете. Он должен одинаково хорошо работать на ModelForm. Я не уверен, как вы заполняете выбор, основываясь на этом вопросе.

class ChoiceForm(Form):                                                         
    choice = ModelChoiceField(queryset=MyModel.objects.all())                    

    def __init__(self, *args, **kw):                                            
        super(ChoiceForm, self).__init__(*args, **kw)                           

        # Add to choices iterator                                               
        choice_field = self.fields['choice']                                    
        choice_field.choices = list(choice_field.choices) + [(0, 'More Options')]

Это дает следующее при рендеринге с тегами <p>:

<p>
    <label for="id_choice">Choice:</label> 
    <select name="choice" id="id_choice">
        <option value="" selected="selected">---------</option>
        <option value="0">More Options</option>
    </select>
</p>

Имейте в виду, что выбор этих полей будет исправлен после того, как вы его создадите. Обычный ModelChoiceField автоматически обновит свой выбор, если результаты запроса, который вы передали, будут изменены.

0 голосов
/ 30 января 2011

Я бы решил следующим образом: 1 - визуализировать окно выбора, как вы делаете в настоящее время 2 - создать два скрытых поля выбора, 1 с ограниченным выбором и другое с полным списком 3 - когда пользователь нажимает на «дополнительные параметры»"Кнопка сбрасывает все опции, и они будут заполнены теми, которые находятся в поле полного выбора.4 - в качестве опции вы можете захотеть, чтобы пользователь вернулся к «меньшему количеству опций», в этом случае вам просто нужно снова сбросить опции и загрузить из скрытого поля выбора с ограниченным выбором.

В порядкедля этого вам просто нужен шаблон для рендеринга 2 полей выбора (меньше опций и больше опций) со свойством style = "display: none" css, а затем для записи события нажатия кнопки js (я обычно это делаю вjQuery) для переключения.

Надеюсь, это поможет, просто спросите, нужны ли вам примеры кода

...