我在模態頁面上有多個表單:1-st 創建一個新的用戶地址和 n 表單,其中包含用戶創建的地址(使用回圈創建)。當我在帶有驗證器的欄位中輸入無效資料(例如 datarequired)時,我在每個表單中都有錯誤訊息。這是我在每種形式中使用的欄位渲染示例:
{{ address_form.street.label(class_="form-label", for="InputStreet") }}
{{ address_form.street(class_="form-control", id="InputStreet") }}
{% for error in address_form.street.errors %}
<span style="color: red;">{{ error }}</span>
{% endfor %}
view.py 中的部分代碼:
@bp.route('/profile/address', methods=['GET', 'POST'])
@login_required
def address():
address_form = AddressForm()
if address_form.submit_address.data and address_form.validate():
address_to_add = Address(
street=address_form.street.data,
house=address_form.house.data,
building=address_form.building.data,
entrance=address_form.entrance.data,
floor=address_form.floor.data,
apartment=address_form.apartment.data,
additional_info=address_form.additional_info.data,
user=current_user)
db.session.add(address_to_add)
db.session.commit()
return redirect(url_for('profile.address'))
if address_form.edit_address.data and address_form.validate():
address_to_edit = Address.query.get(address_form.address_id.data) # Here is data from hidden field
# Editing data in DB
db.session.commit()
return redirect(url_for('profile.address'))
return render_template('profile/address.html', title='Адрес доставки', address_form=address_form)
表單在添加、編輯和洗掉資料時作業正常,但在驗證錯誤時作業不正確。我認為如果宣告與隱藏欄位相關或更改我的 html 檔案中的某些內容,我還需要一個條件。我試過以如下形式添加一個動作屬性:
<form action="{{ url_for('profile.address', form_id=address.id) }}" method="post" novalidate>
在視圖函式中像這樣,但它不起作用:
form_id = request.args.get('form_id', type=int)
if address_form.edit_address.data and address_form.validate() and form_id == address_form.address_id.data:
pass
uj5u.com熱心網友回復:
我又試了一次
<form action="{{ url_for('profile.address', form_id=address.id) }}" method="post" novalidate>
form_id = request.args.get('form_id', type=int)
if address_form.edit_address.data and address_form.validate():
pass
和
{{ address_form.street.label(class_="form-label", for="InputStreet") }}
{{ address_form.street(class_="form-control", id="InputStreet", value=address.street) }}
{% if form_id == address.id %}
{% for error in address_form.street.errors %}
<span style="color: red;">{{ error }}</span>
{% endfor %}
{% endif %}
現在它適用于使用回圈創建的表單,但在主添加表單中仍然有驗證錯誤訊息。
uj5u.com熱心網友回復:
最后我找到了一個非常糟糕的解決方案:
address_form = AddressForm()
form_id = request.args.get('form_id', 0, type=int)
對于主表單,form_id 始終為 0。主表單的表單標記:
<form action="{{ url_for('profile.address', form_id=form_id) }}" method="post" novalidate>
主表單的欄位渲染:
{{ address_form.street.label(class_="form-label", for="InputStreet") }}
{{ address_form.street(class_="form-control", id="InputStreet") }}
{% if form_id == 0 %}
{% for error in address_form.street.errors %}
<span style="color: red;">{{ error }}</span>
{% endfor %}
{% endif %}
如果有人對我的問題有更好的解決方案,那就太好了。現在是時候學習一些 JS 并用 AJAX 解決這個問題了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/409317.html
標籤:
上一篇:如何修復無法延遲初始化集合
