Динамически определять min_entries в Flask FieldList - PullRequest
0 голосов
/ 19 апреля 2020

У меня проблемы с динамическим c определением min_entries. По сути, я хочу назвать форму динамическим c раз, основываясь на определенной пользователем переменной.

Что я делаю, так это проверяю, есть ли у пользователя уже введенная переменная (попробуйте x, кроме), если нет, я отображаю форму и шаблон для определения этой переменной и сохраняю данные в переменной, x , Затем я определяю локальный класс форм, который имеет атрибуты, такие как Portfolio_Predict, и определяю список полей, рукав, в этом локальном классе.

Вот что я пробовал до сих пор:

Формы:

class Portfolio(FlaskForm):
    name = SelectField("Sleeve name: ", choices=[(a.id, a.Sleeve_name) for a in Sleeves.query.order_by(Sleeves.Sleeve_name)],validators = [DataRequired()])
    weight = FloatField('Weight: ')

class Portfolio_Predict(FlaskForm):

   ** Sleeve = FieldList(FormField(Portfolio)) **
    port_name = StringField('Portfolio name: ')
    submit = SubmitField('Submit Portfolio')

view:

def enterportfolio():

    if not current_user.is_authenticated:
        return redirect(url_for('login'))

    try:
        x
    except NameError:
        form = InputSleeves()
        if form.validate_on_submit():
            **x = form.entry.data
            class LocalForm2(Portfolio_Predict): pass
            LocalForm2.port_name = FieldList(FormField(Portfolio), min_entries = x)
            form = LocalForm2()**

            if form.validate_on_submit():
                print(form.port_name.data)
                for i in form.Sleeve.entries:
                    print(i.data)
            return render_template('enterportfolio.html',title='Portfolio',form=form)
        return render_template('enterportfolio2.html',title='Enter',form=form)

Я поместил две звезды вокруг, где я думаю, что я делаю ошибку, но не уверен, как исправить (или если то, что я пытаюсь сделать, даже возможно ).

Кто-нибудь может помочь?

РЕДАКТИРОВАТЬ: вот ошибка, которую я получаю при запуске -

TypeError: 'formdata' является недопустимым аргументом ключевого слова для портфолио

РЕДАКТИРОВАТЬ 2: сделал перерыв и понял это. Не уверен, что есть лучший способ сделать это, но мы здесь -

Формы:

class Portfolio(FlaskForm):
    name = SelectField("Sleeve name: ", choices=[(a.id, a.Sleeve_name) for a in Sleeves.query.order_by(Sleeves.Sleeve_name)],validators = [DataRequired()])
    weight = FloatField('Weight: ')

class Portfolio_Predict(FlaskForm):
    port_name = StringField('Portfolio name: ')
    submit = SubmitField('Submit Portfolio')

    def Sleeve_(x):
        return FieldList(FormField(Portfolio),min_entries = x)

view:

@call_this.route('/enterportfolio',methods=['GET','POST'])
#@call_this.route('/enterportfolio2',methods=['GET','POST'])

def enterportfolio():

    if not current_user.is_authenticated:
        return redirect(url_for('login'))

    try:
        x
    except NameError:
        form = InputSleeves()
        if form.validate_on_submit():
            x = form.entry.data
            class Local_Portfolio_Form(Portfolio_Predict): pass

            Local_Portfolio_Form.Sleeve = Portfolio_Predict.Sleeve_(x)
            form = Local_Portfolio_Form()
            #class LocalForm2(Portfolio_Predict): pass
            #LocalForm2.port_name = FieldList(FormField(Portfolio), min_entries = x)
            #form = LocalForm2()
            #form = Portfolio_Predict()
            #form.Sleeve_(x)
            if form.validate_on_submit():
                print(form.port_name.data)
                for i in form.Sleeve.entries:
                    print(i.data)
            return render_template('enterportfolio.html',title='Portfolio',form=form)
        return render_template('enterportfolio2.html',title='Enter',form=form)
...