Я пытаюсь создать форму для веб-сайта (используя Python Flask, WTForms и pyodbc для подключения к базе данных).У меня есть база данных сервера SQL, которая отображает записи для обновления в HTML.
Моя цель - обновить «Цена за единицу» и «Скидка» для каждой записи в базе данных.Форма, которую я создал, требует ввода от пользователя в каждое из этих полей.Поскольку эти данные базы данных отображаются в списке, я не уверен, как сопоставить данные обратно в базу данных.
Когда я отправляю форму как есть, в базу данных вставляется только первая запись и Вот как выглядит форма в моей тестовой среде (пожалуйста, простите за ужасное форматирование).Первый столбец предназначен для «цены за единицу», а второй - для «скидки», единственная запись, вставленная в базу данных, является первой, и элемент и имя элемента не отображаются должным образом.
Есть ли способ ссылки на столбцы в "elementdata"?(ex: elementdata.UniqueKey)
Как я могу создать связь между данными, отображаемыми в html, и данными, вставленными в базу данных?
РЕДАКТИРОВАТЬ: Я посмотрел несколько видео Кори Шаферана YouTube и нашел их полезными, но они не совсем решили мою проблему. (https://www.youtube.com/channel/UCCezIgC97PvUuR4_gbFUs5g)
В настоящее время я направляюсь в направлении создания своего собственного списка, а затем вызываю этот список в HTML. Поэтому вместо этого
elementdata = cur.execute ("ВЫБЕРИТЕ UniqueKey, Элемент, ЭлементName, Количество ОТ FakePricingData WHERE ClientName = имя клиента"). fetchall ()
Я пытался:
uniquekey= cur.execute ("SELECT UniqueKey ОТ FakePricingData WHERE ClientName = clientname"). fetchall ()
element = cur.execute ("SELECT Элемент ИЗ FakePricingData WHERE ClientName = clientname"). fetchall ()
elementname = cur.execute ("SELECT ElementName ОТ FakePricingData WHERE ClientName = clientname"). Fetchall ()
elementdata = [uniquekey, element, elementname]
Однако, при ссылке на elementdata [0] вместо получения только уникального ключа, я получаю весь первый ряд.
Как я могу получить то, что я ищу?Буду признателен за любую помощь, которую я могу получить!
@app.route("/VendorPricing/Example", methods=['GET', 'POST'])
@login_required
def vendorpricing():
clientname = "Example Credit Union"
elementdata = cur.execute("SELECT UniqueKey, Element, ElementName, Quantity FROM FakePricingData WHERE ClientName=clientname").fetchall()
form = VendorPricingForm()
if form.validate_on_submit():
for elementdata in elementdata:
loggedinuserid = current_user.get_id()
query = "INSERT INTO FakeQuoteData (UniqueKey, Element, ElementName, Quantity, UnitPrice, Discount, ClientName, SubmittedBy, LoggedInUserId) VALUES (?,?,?,?,?,?,?,?,?);"
query_values = [form.uniquekey.data, form.element.Element, 'NULL', '0', form.unitprice.data, form.discount.data, clientname, form.submittedby.data, loggedinuserid]
cur.execute(query, query_values)
cur.commit()
flash('Your pricing has been submitted!', 'success')
return redirect(url_for('welcome'))
return render_template('vendorpricing.html', form=form, clientname=clientname, elementdata=elementdata)
------ form ------
class VendorPricingForm(FlaskForm):
unitprice = IntegerField('Unit Price', validators=[DataRequired()])
discount = IntegerField('Discount')
uniquekey = StringField('Unique Key')
submittedby = StringField('Submitted By', validators=[DataRequired()])
submit = SubmitField('Submit')
{% extends "layout.html" %}
{% block content %}
<h2>{{ title }}</h2>
<body>
<form method="POST" action="">
{{ form.hidden_tag() }}
<div class="vendor-form-group">
{{ form.unitprice.label(class="form-control-label") }}
{{ form.discount.label(class="form-control-label") }}
{% for elementdata in elementdata %}
<p>
{{ elementdata }}
{{ form.unitprice }}
{{ form.discount }}
</p>
{% endfor %}
{{ form.submittedby.label(class="form-control-label") }}
<p>{{ form.submittedby }}</p>
{{ form.submit }}
</div>
</form>
</body>
{% endblock content %}