私はユーザーが登録する必要があるAPPを持っています。フォームのPython Flaskフォーム - 登録プロセスの一部を更新する
私は、登録データのユーザー名、電子メールのための1 form
など
同じプロセスでユーザー登録複数のカテゴリを持つことができる会社を持っています。私はカテゴリの一定量を持っているカテゴリテーブルを持っている私のDBに
、ユーザーは、彼は彼の会社のための10個のカテゴリーまで選ぶことができます登録している間500
を言うことができます。
問題:
私はページ上の500のカテゴリを表示したくありません。私は、ユーザーが自分の会社に合ったカテゴリを検索しようとする入力フィールドを持っていたいと思います。
MY IDEA:
私は2番目のform_category
を作成しました。私はsqlalchemy %like%
でクエリを制限するためにこのフォームを使用するので、500のカテゴリをすべて表示する必要はありません。私は彼らが20個のカテゴリーを言うことができますすることを制限し、%などのユーザ入力%が適用される場合にのみ関連するものを示しています。
searched_categories = session.query(Category).filter(Category.category_name.like('%'+form_category.category_search.data.strip()+'%')).limit(20)
PROBLEMすべての
まず、私は今の形でフォームを持っています。どちらの形式も同じ動作をします。そして、それは最初の送信ボタンが常にアクティブなものであるように思えます。つまり、今はform_category
しか提出できません。
これを修正することができても、ページ全体が毎回読み込まれ、前のフィールドからすべての入力が失われる可能性があります。
より多くのアイデア:
私はこれのための1つ以上のビューを作成し、クッキー内に既に入力されたデータを格納することができます。私の最初のルートは/register
であり、ユーザーがカテゴリを検索すると/register/<user-input>
になりますが、それは間違っています。
form_category
を削除してjQueryですべてを実行することもできますが、noscript
のユーザーはサイトを使用できません。
を持っている
NICEは、フォームが送信された場合にページ全体をrelaodしない方法はあります、私は唯一のカテゴリが表示されるページの一部をrelaodしたいと思います。HERE
は、いくつかのコードです:
フォーム:私の神社のhtmlファイルのフォームで
class RegisterUserForm(Form):
# infos for user
email = EmailField('Email', validators=[DataRequired(message="Geben Sie eine Email ein"), Email()])
password = PasswordField('Passwort', validators=[DataRequired(message="Geben Sie ein Passwort ein"), EqualTo('confirm_password', message=u'Passwörter stimmen nicht überein'), Length(min=5, message="Passwort muss mindestens 5 Zeichen lang sein")])
confirm_password = PasswordField('Passwort wiederholen')
# infos for company
company_name = TextField('Firmenname', validators=[DataRequired(message=u"Wie heißt Ihre Firma?")])
# infos for category
category_is_merchant = BooleanField(u"Händler")
category_is_distributor = BooleanField(u"Großhändler")
category_is_service = BooleanField("Diensleister")
category_is_manufacturor = BooleanField("Hersteller")
# etc...
class SearchCategoryForm(Form):
category_search = TextField('Nach Branche suchen')
フォーム(私は重要でないデータを削除):
<form class="col-xs-12" id="register-form" enctype="multipart/form-data" method="POST" action="{{ url_for('register', next=request.args.get('next')) }}">
{{ form.hidden_tag() }}
<div id="content-company-data">
<h2> Firmendaten </h2>
<div class="content">
<!-- some data -->
<form class="col-xs-12" id="search-category-form" enctype="multipart/form-data" method="POST" action="{{ url_for('register', next=request.args.get('next')) }}">
{{ form_category.hidden_tag() }}
<div class="form-group">
{{ form_category.category_search.label }}
{{ form_category.category_search(class = "form-control", placeholder ="Branche") }}
{% if form_category.category_search.data.errors %}
{% for error in form_category.category_search.data.errors %}
<p class="flashes-error-form"> {{ error }}</p>
{% endfor %}
{% endif %}
</div>
<button type="submit" class="btn"> Branche suchen </button>
</form>
<!-- some data -->
<button type="submit" class="btn register-button"> Jetzt Kostenlos Registrieren </button>
</form>
私のメインで私がフォームを提出するpy(limit()付きatm。):
# register site
@app.route('/registrieren', methods=["GET","POST"])
def register():
if current_user.is_authenticated():
return redirect(url_for('logged_in'))
else:
form = RegisterUserForm()
form_category = SearchCategoryForm()
searched_categories = Category.query.order_by(asc("id")).limit(4)
if form_category.validate_on_submit():
print "cat form validates"
searched_categories = Category.query.order_by(asc("id")).limit(2)
return redirect(url_for('register'))
if form.validate_on_submit():
print "user form validates"
#adding data to DB here
return redirect(url_for('unconfirmed'))
return render_template('register.html', form = form, form_category=form_category, searched_categories=searched_categories)
JavaScriptからオートコンプリート機能ですでに修正済みです。 – Roman
それは答えがbtwではありません。コメントはコメントセクションに入る必要があります。そうでなければ、あなたはdownvotedになります。 – Roman