Я пытаюсь создать базовый пакет бухгалтерского учета с помощью Flask, и я немного застрял с проверкой конкретной формы. Он работает для другой формы в том же приложении, но по какой-то причине я не могу понять, почему эта тоже не работает. Форма отображается в веб-браузере так, как должна, и я могу вводить данные как обычно, но когда я прихожу, чтобы отправить форму, она просто перезагружает страницу. Моя база данных не обновляется, и после некоторых копаний я обнаружил, что мой if form.validate_on_submit()
ничего не ловит.
В трассировке стека также нет ошибок.
Я опубликую соответствующие разделы моих файлов ниже.
My views.py
:
@app.route('/dashboard/<nickname>/work-orders/add/', methods = ['GET', 'POST'])
@login_required
def work_orders_add(nickname):
ca = check_active(nickname)
if ca[1] == True:
form = AddWorkOrderForm()
u = User.query.get(current_user.id)
c = u.contacts.order_by('name').all()
form.requestor.choices = [(contact, contact.name) for contact in c]
if form.validate_on_submit():
db.session.add(WorkOrder(requestor = form.requestor.data,
date = form.date.data,
notes = form.notes.data,
total = 0.00,
completed = form.completed.data,
user = g.user))
db.session.commit()
return redirect(url_for('work_orders', nickname=current_user.nickname))
elif request.method != "POST":
form.date.data = datetime.date.today()
else: return "didn't work"
return render_template('work_orders_add.html',
user = ca[0],
title = "New Work Order",
form = form)
else: return redirect(url_for('work_orders', nickname=current_user.nickname))
My forms.py
:
class AddWorkOrderForm(Form)
requestor = SelectField('requestor', coerce=unicode)
date = DateField('date')
notes = TextAreaField('notes')
completed = BooleanField('completed', default = False)
My models.py
:
class WorkOrder(db.Model):
__tablename__ = 'workorder'
id = db.Column(db.Integer, primary_key = True)
date = db.Column(db.String(64))
notes = db.Column(db.String(1024))
total = db.Column(db.Float)
completed = db.Column(db.Boolean)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
contact_id = db.Column(db.Integer, db.ForeignKey('contact.id'))
items = db.relationship('WorkOrderItem', primaryjoin="WorkOrder.id==WorkOrderItem.work_order_id", backref = 'order')
def __repr__(self):
return '<WorkOrder %r>' % (self.id)
Мой HTML-файл:
{% extends "_is_logged.html" %}
{% block content %}
<h1>{{ title }}</h1>
<form action="" method="post" name="work_order">
{{ form.hidden_tag() }}
<p>Requestor: {{ form.requestor() }}</p>
<p>Date: {{ form.date() }}</p>
<p>Notes: {{ form.notes(size=70) }}</p>
<p>Completed: {{ form.completed() }}</p>
<p><input type="submit" value="Add Work Order"></p>
</form>
{% endblock %}
Спасибо.
{% for field_name, field_errors in form.errors.items() %}<p>{{ field_name }} <ul>{% for error in field_errors %}<li>{{ error }}</li>{% endfor %}</ul>{% endfor %}</p>
в файл шаблона? - person Sean Vieira   schedule 19.01.2014content
... - person Sean Vieira   schedule 19.01.2014content
, но, к сожалению, ничего не производит. - person LJPPython   schedule 19.01.2014print
в каждый из ваших блоков - пойдет ли он туда, куда вы ожидаете? (А что будет, если передreturn render_template
поставитьprint "Form Errors:", form.errors
? - person Sean Vieira   schedule 20.01.2014<form action=""
Спецификация HTML5 требует непустого атрибута действия. - person larissa   schedule 14.08.2014form.errors
иrequest.method
методомwork_orders_add
! - person Prakash Pandey   schedule 11.06.2015