У меня проблемы с динамическим 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)