Python + колба - выбор из нескольких выпадающих меню - PullRequest
0 голосов
/ 11 февраля 2019

Я повторно отправил этот вопрос, потому что мне кажется, что я знаю, что происходит, но я не уверен, как это исправить.

Я создал подпрограмму, предназначенную для выполнения следующих действий: (1) Создатьвыбор из двух выпадающих меню (A и B) (2) Выбор из A и B затем используется в качестве входных данных для скрипта Python, который создает список для 3-го выпадающего меню (C) (3) Пользователь выбирает C изатем он используется для выбора информации из кадра данных Pandas, который будет заполнять 4-е выпадающее меню.(4) После четвертого выбора должен появиться красивый сюжет.

Я считаю, что проблема заключается в том, что форма перезаписывается после каждой отправки формы.Вот оболочка кода.

def pulldown_test():

results = []

year_now = datetime.now().year   
years = np.arange(2011,year_now+1,1)
year_list = [(n, year) for n, year in zip(np.arange(0,len(years)), years)] 

basins = ['AL','EP','CP','WP']
basin_list = [(n,basin) for n, basin in zip(np.arange(0,len(basins)), basins)]

form = pulldown_form()
if form.stormyear.choices is None:  
    print ('Here we initialize the form!')
    form.stormyear.choices = year_list 
    form.stormbasin.choices = basin_list

if form.stormname.choices is None:
    print ('Hi ZIPPY! No Stormname choices exist')
    form.stormname.choices = [(-1, 'Name List')]
else:
    form.stormname.choices = name_list
if form.stormdate.choices is None:
    form.stormdate.choices = [(-1, 'Date List')]
else:
    form.stormdate.choices = date_list

print('Here we assign the session info')
session['stormbasin'] = form.plotwant.data
session['stormyear'] = form.stormyear.data


if ( form.stormyear.data is not None ) & ( form.stormbasin.data is not None ):
    if form.stormname.data > 0:
        if form.stormdate.data > 0:
            print ('From here we can plot')

        else:
            print ('Now we collect dates')
            print ('Did we lose the stormname? ',form.stormname.data)
            names = storms.name.unique()
            form.stormyear.choices = year_list 
            form.stormbasin.choices = basin_list
            form.stormname.choices = name_list
            dates = storms[storms.name == names[form.stormname.data]].dates.values
            date_list = [(n, date) for n, date in zip(np.arange(0,len(dates)), dates)]
            form.stormdate.choices = date_list

    else:
        print ('Now we find a name')
        form.stormyear.choices = year_list 
        form.stormbasin.choices = basin_list
        storms = oti.collect_all_names_and_times( years[ form.stormyear.data ], basins[ form.stormbasin.data ] )
        names = storms.name.unique()
        name_list = [(n, name) for n, name in zip(np.arange(0,len(names)), names)]
        form.stormname.choices = name_list  


return render_template('pulldown_test.html', results=results, form=form)    

Так вот, что происходит

Первый шаг работает отлично, я получаю информацию от A и B. Никаких проблем.Затем A и B вводятся в подпрограмму Python, и я получаю информацию для заполнения списка C (имя шторма)

Итак, я выбираю имя шторма ... и код затем отправляется в фрейм данных и выбирает доступные даты.для этого имени и заполняет список D

Однако, когда я возвращаюсь после рендеринга ... списки A, B и D заполняются, но список C (имя шторма) исчезает и сбрасывается в none.

I Предположим, это связано с повторной загрузкой одной и той же формы на каждом шаге.Если да, то какова правильная логика, чтобы обойти это препятствие и добраться до заговора?

...