У меня есть APP, где пользователи должны зарегистрироваться.Python Flask form в форме - обновить часть процесса регистрации
У меня есть один form
для регистрации имя пользователя данных по электронной почте и т.д.
Пользователь регистрируется в том же процессе, что предприятие может иметь несколько категорий.
В моей БД у меня есть таблица категории, которая имеет фиксированное количество категорий, позволяет сказать, 500.
Когда пользователь регистрируется, он может выбрать до 10 категорий для своей компании.
ПРОБЛЕМА:
Я не хочу, чтобы отобразить 500 категорий на этой странице. Я хотел бы иметь поле ввода, в котором пользователь может попытаться найти категории, которые подходят для его компании.
МОЯ ИДЕЯ:
Я создал второй form_category
. Я использую эту форму для ограничения запроса с помощью sqlalchemy %like%
, поэтому мне не нужно отображать все 500 категорий. Я ограничиваю их позволяет говорить 20 категорий и показывать только соответствующие те, где применяется пользовательский ввод% как%:
searched_categories = session.query(Category).filter(Category.category_name.like('%'+form_category.category_search.data.strip()+'%')).limit(20)
ПРОБЛЕМА
Прежде всего я имею теперь форму в форме. Обе формы имеют одно и то же действие. И кажется, что первая кнопка отправки всегда активна, и теперь я могу только отправить form_category
.
И даже если мне удастся это исправить, вся страница будет перезагружаться каждый раз, и я, вероятно, потеряю все входы из полей раньше.
MORE IDEAS:
я мог бы создать еще один вид для этого и сохранить уже введенные данные в куки. Мой первоначальный маршрут будет /register
, и если пользователь будет искать категорию, он станет /register/<user-input>
, но это не так.
Я также мог удалить form_category
и попытаться сделать все с помощью jQuery, но для людей с noscript
сайт не будет использоваться.
приятно иметь
Есть ли способ, чтобы не relaod всей страницы, если форма отправлена, я хотел бы только relaod части страницы, где отображаются категории.
Вот код:
формы:
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')
форма в виде в моем HTML файл дзиндзя (я удалил несущественные данные):
<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, где я представляю формы (испытательные атм. с лимитом()):
# 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
Это ответ не кстати. комментарии должны войти в раздел комментариев, иначе вы будете замедленными. – Roman