145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246

Django: выпадающий список, где элементы этого списка взяты из модели

10.06.2016, 09:11. Показов 16437. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Django 1.9.6

Есть модель Person. Делаю выборку документов, относящихся к конкретному человеку.
На странице поисковой формы хочу сделать выпадающий список с перечнем людей.

Подсмотрел пример здесь:
http://stackoverflow.com/quest... hoicefield

Вот пример:
Python
1
2
3
4
5
6
7
8
class GetDocumentForm(forms.Form):
    document          = forms.ChoiceField()
 
    def __init__(self, *args, **kwargs):
        super(GetDocumentForm, self).__init__(*args, **kwargs)
 
        for doc in Document.objects.all().order_by('docfile'):
            self.fields['document'].choices.append((doc.id, doc.docfile.name))
Сделал по этому образцу:

/photoarchive/general/forms.py

from person.models import Person
Python
1
2
3
4
5
6
7
8
9
class SearchEngineForm(forms.Form):
 
    person = forms.ChoiceField()
 
    def __init__(self, *args, **kwargs):
        super(SearchEngineForm, self).__init__(*args, **kwargs)
        people = Person.objects.all().order_by('slug')
        for person in people:
            self.fields['person'].choices.append((str(person.id), str(person)))

/photoarchive/general/views.py

Python
1
2
3
4
5
6
7
from django.views.generic import View
from .forms import SearchEngineForm
 
class SearchEngineView(View):
    def get(self, request):
        prepared_form = SearchEngineForm()   
        return render(request, "general/search_engine.html", {"form": prepared_form}) # Breakpoint
Не работает: выпадающий список пуст.

Поставил точку останова, получил такую картину:
Python
1
2
3
4
5
6
7
"prepared_form" SearchEngineForm: <tr><th><label for="id_person">Person:</label></th><td><select id="id_person" name="person">\n</select></td></tr> 
    \
    fields  OrderedDict: OrderedDict([('person', <django.forms.fields.ChoiceField object at 0x7ff8dab502e8>)])
      \
      'person' (140707054337416)    ChoiceField: <django.forms.fields.ChoiceField object at 0x7ff8dab502e8> 
         \
      choices   <class 'list'>: [('2', 'Johnson John (1976)'), ('1', 'Smith Adam (1800)')]
В общем, список кортежей прилетел, но результата нет. Т.е. на в браузере на форме появляется выпадающий список, но нет вариантов выбора. Иначе говоря, жми - не жми на выпадающий список, он пустой. И при просмотре html видно, что опций нет - пусто.

Колдовал, колдовал, и вот это заработало:

Python
1
2
3
4
5
6
7
8
class SearchEngineForm(forms.Form):
    person = forms.ChoiceField()
 
    def __init__(self, *args, **kwargs):
        super(SearchEngineForm, self).__init__(*args, **kwargs)
        people = Person.objects.all().order_by('slug')
        for person in people:
            self.fields['person'].widget.choices.append((str(person.id), str(person)))
Мучают вопросы:
1. Почему же у меня не работает при добавлении в choices? Идея парня со Stackoverflow представляется довольно разумной. И он говорит, что зарабоатало все. А у меня не работает.
2. Что-то я подозреваю, что при большой нагрузке это все развалится: блокировки-то нет на person. Начнешь сохранять, а в базе данных уже и нет такого элемента. Где посмотреть хороший пример решения подобной задачи?


Заранее спасибо за ответы
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2016, 09:11
Ответы с готовыми решениями:

Задан список, в котором все элементы различны. Найдите минимальный и макси-мальный элементы этого списка
помогите пожалуйста , очень нужно

создать односвязный список на Си, содержащий элементы 12, 93,301. Удалить из этого списка 93.
создать односвязный список на Си, содержащий элементы 12, 93,301. Удалить из этого списка 93

Дан список целых чисел. Выведите все элементы этого списка в порядке не возрастания значений
Дан список целых чисел. Выведите все элементы этого списка в порядке не возрастания значений. Выведите новый список на экран. Решите...

2
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
10.06.2016, 11:14
Цитата Сообщение от Kifsif Посмотреть сообщение
1. Почему же у меня не работает при добавлении в choices? Идея парня со Stackoverflow представляется довольно разумной. И он говорит, что зарабоатало все. А у меня не работает.
может версии django разные
Цитата Сообщение от Kifsif Посмотреть сообщение
2. Что-то я подозреваю, что при большой нагрузке это все развалится: блокировки-то нет на person. Начнешь сохранять, а в базе данных уже и нет такого элемента. Где посмотреть хороший пример решения подобной задачи?
ябы проверял при сохранении и сообщал пользователю
2
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246
13.06.2016, 09:53  [ТС]
Версия джанго - не знаю, что сказать. Я не уверен. Причина: кривовато что-ли получилось.

В widget я положил список. Все работает. А в choices я список класть не стал. Ну, как бы зачем - все работает. Зачем же лишней операцией ресурсы отвлекать.

Да вот беда. Моделирую ситуацию: choices добавляешь не сам программно, а копируешь пример из документации.
Так вот, там choices заполняется и widget.choices. А у меня - только widget.choices.

Что-то я делаю неправильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2016, 09:53
Помогаю со студенческими работами здесь

программа которая берет список и создает список другой из этого же списка + тот же список без последнего элемента
надо написать программу которая берет список и создает список другой из этого же списка + тот же список без последнего элемента к...

Реализовать однонаправленный список, где элементы добавляются, просматриваются и удаляются с начала списка
2. Реализовать алгоритм работы с динамической структурой данных – однонаправленный список: элементы добавляются, просматриваются и...

Создать список L, элементы которого содержат все элементы списка L1 и нечетные элементы списка L2
Подскажите, пожалуйста, как решить. Я знаю как создать два списка, но не могу понять как их объединить? Как добавить только нечетные...

Выпадающий список в Word со списка в Excel
Добрый день. Есть один документ в котором будет около 15 полей с выпадающими списками. Документ в формате Word. Выпадающие...

Выпадающий список не закрывается,где ошибка?
&lt;html&gt; &lt;head&gt; &lt;style type=&quot;text/css&quot;&gt; div#container &gt; div{ display:none; } &lt;/style&gt; &lt;script...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru