2017-01-20 11 views
0

GOAL: Отправьте словарь данных в форму, которая будет использоваться в раскрывающемся окне.Django: отправить словарь/данные списка в форму

Views.py

form = FormsdbForm(initial={'user': default_state}) 
# (to set the default value of the 'user' field) 

Forms.py

class FormsdbForm(forms.ModelForm): 
    ROOMLIST = (('roomID_abcdefghi','Room ABC'), 
       ('roomID_jklmnopqr','Room JKL')) 
    roomid = forms.ChoiceField(required=False, choices=ROOMLIST) 

    class Meta: 
     model = Formsdb 
     fields = ('user', 'uniqueid', 'roomid') 

выше настройки отображает форму, где поле 'RoomID' представляет собой выпадающий список, показывающий для записей:

  • Номер ABC
  • Номер JKL

После сохранения база данных заполнена совпадающим «RoomID_xxxxxxxxx» Идеально!

В моем Views.py У меня есть словарь (который я могу легко преобразовать в список списков) с данными, которые теперь статически настроены в Forms.py (ROOMLIST).

ВОПРОС:Как передать этот словарь (или список) в форму, чтобы он отображал раскрывающийся список с вариантами?

Это заменит текущую переменную «ROOMLIST», и она может легко содержать 400-600 записей.

ответ

0

Вид:

from django.views.generic import FormView 

class FormsdbView(FormView): 
    # ... 

    def get_form_kwargs(self): 
     kwargs = super(FormsdbView, self).get_form_kwargs() 
     ROOMLIST = (('roomID_abcdefghi','Room ABC'), 
        ('roomID_jklmnopqr','Room JKL')) 
     kwargs['roomlist'] = ROOMLIST 
     return kwargs 

Если вы не используете FormView, вы можете также сделать form = FormsdbForm(initial={'user': default_state}, roomlist=ROOMLIST)

Форма:

from django import forms 

class FormsdbForm(forms.ModelForm): 

    roomid = forms.ChoiceField(required=False) 
    # ... 

    def __init__(self, *args, **kwargs): 
     self.roomlist = kwargs.pop('roomlist', None) 
     super(FormsdbForm, self).__init__(*args, **kwargs) 
     self.fields['roomid'].choices = self.roomlist 
+0

Фантастическая .. Это похоже на работу .. Теперь Я должен найти способ конвертировать * список словарей * в кортежи из кортежей :-(Исходными данными являются ____ '[{" roomid_ABC ":" roomname_ABC "}, {" roomid_ABC "," roomname_ABC "} ] '__ любые идеи? мозг болит .. (по крайней мере, это означает, что формат должен быть кортежем) – user7446236

+0

@ user7446236 Хорошо, чтобы ввести dict в список кортежей; '[(k, v) для k, v в d.iteritems()]', поэтому просто добавьте список таким же образом. И, может быть, примите мой ответ;) –

+0

Отлично, спасибо! извинения за задержку, был занят, пытаясь устранить эту последнюю вещь. ;-) – user7446236

 Смежные вопросы

  • Нет связанных вопросов^_^