2017-02-21 7 views
1

私はユーザーが登録する必要がある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) 

答えて

0

純粋なPythonソリューションをお探しですか?あなたの要件は簡単にAjaxを使ってクライアント側で実装することができ、自動完成タグ追加jqueryプラグイン

+0

JavaScriptからオートコンプリート機能ですでに修正済みです。 – Roman

+0

それは答えがbtwではありません。コメントはコメントセクションに入る必要があります。そうでなければ、あなたはdownvotedになります。 – Roman