Делать ВЫБОР в динамических формах - PullRequest
0 голосов
/ 20 января 2012

Я застрял на некоторое время, пытаясь установить динамические CHIOCES в выборе формы с помощью Python 2.7. Мне нужно, чтобы ВЫБОРЫ исходили из запроса в моем def update_file_choices. Вот код в views.py:

FILES_UPLOADED=[]           ##choices varible for template

def update_file_choices():  ##setup choices for RoomForm in launch page
    global FILES_UPLOADED
    uploads = FileUpload.objects.all()  
    for file in uploads:
        FILES_UPLOADED.append((file.title,file.title))
        print 'FILES IN UPLOADS:', file
    return(FILES_UPLOADED)

1. Формы из следующего класса работают, за исключением того, что они не показывают названия новых файлов, загруженных в этом сеансе.

class RoomForm(forms.Form):    ##for launch template
    FILES_UPLOADED = update_file_choices()
    titles = forms.ChoiceField(choices=FILES_UPLOADED) 

2. Поэтому я перешел на эту версию, вызвав базовый класс, но теперь форма настраивается без каких-либо переменных данных.

class RoomForm(forms.Form):      
    def __init__(self, *args):
        forms.Form.__init__(self, RoomForm)
        FILES_UPLOADED = update_file_choices()
        titles = forms.ChoiceField(choices=FILES_UPLOADED) 

3. Это было той же проблемой:

class RoomForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(RoomForm, self).__init__(*args, **kwargs)
        FILES_UPLOADED = update_file_choices()
        titles = forms.ChoiceField(choices=FILES_UPLOADED) 

Любые предложения будут высоко оценены.

Ответы [ 2 ]

3 голосов
/ 20 января 2012

Если ваш выбор поступает непосредственно из набора запросов (из FileUpload), почему бы вам не использовать поле формы, предназначенное для этого: ModelChoiceField?

titles = forms.ModelChoiceField(queryset=FileUpload.objects.all())
0 голосов
/ 20 января 2012

Вы должны сделать это автоматически изменяемым итеративным.Что-то вроде:

def files_uploaded():
        for file in FileUpload.objects.all():
                yield (file.title, file.title, )

class RoomForm(forms.Form):
        titles = form.ChoiceField(choices=files_uploaded())
        def __init__(self, *args, **kwargs):
                super(RoomForm, self).__init__(*args, **kwargs)
                self.fields['titles'].choices = files_uploaded()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...