Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/88: Рейтинг темы: голосов - 88, средняя оценка - 4.76
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,246

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

10.06.2016, 09:11. Показов 16372. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru