Получение значений из QuerySelectField и отправка в базу данных – PythonPython

Программы на Python
Ответить
Anonymous
 Получение значений из QuerySelectField и отправка в базу данных – Python

Сообщение Anonymous »

По сути, я пытаюсь отправить данные формы из поля запроса в базу данных. Проблема, с которой я столкнулся, заключается в том, что я не могу найти способ отформатировать данные, чтобы не отображать как имя объекта, так и фактическое значение объекта.
Из таблицы под названием компания я получаю три сохраненных значения. в таблице; Компания A, Компания B, Компания C.
В качестве примера из таблицы Company: если я выполняю команду печати один раз внутри функции form.validate, результаты всегда отображаются как [ Компания Компания А]. Поэтому я не могу добавить эти данные в другую таблицу, поскольку в данных они не отображаются как компания A.
Поле queryselect отлично отображает названия компаний, но при чтении данные после form.validate интерпретируются как [Компания Компания A]
Итак, чтобы разбить их...
models.py

Код: Выделить всё

class Company(db.Model):
id = db.Column(db.Integer, primary_key=True)
company = db.Column(db.String(50), unique=True)
contact = db.Column(db.String(50))

def __str__(self):
return '[Company {}]'.format(self.company)
forms.py

Код: Выделить всё

def company_query():
return Company.query

class ChooseCompanyForm(FlaskForm):
opts = QuerySelectField('Select Company', query_factory=company_query, allow_blank=False, get_label='company')
submit = SubmitField('Submit')
routes.py

Код: Выделить всё

@app.route("/new_ticket", methods=['GET', 'POST'])
def new_ticket():
form = ChooseCompanyForm()

form.opts.query = Company.query.all()

if form.validate_on_submit():
#company = request.form.get('opts') # tried it this way too
company = form.opts.data

#db.session.add(company)
#db.session.commit()

print(company) # for debugging
#print(form.opts.data)  # for debugging

flash('A new ticket has been added to the database.', 'success')

return redirect(url_for('index'))
#return '{}'.format(form.opts.data) #for seeing returned values

return render_template('new_ticket.html', title='Create New Ticket', form=form)
templates/new_ticket.html

Код: Выделить всё

{% extends "layouts.html" %}

{% block content %}

{{ form.csrf_token }}

New Ticket Information

{{ form.opts.label(class="form-control-label") }}

{{ form.opts }}

[list]
{% for error in form.opts.errors %}
[*][{{ error }}]
{% endfor %}
[/list]


{{ form.submit(class="btn btn-outline-info  border-bottom mb-2") }}


{% endblock %}
templates/index.html

Код: Выделить всё

{% extends "layouts.html" %}

{% block content %}

Service Desk


[url={{ url_for(]New Ticket[/url] [url={{ url_for(]Home[/url]



{% endblock %}
Я перепробовал все, что мог найти, о том, как получить данные формы. Вот что отображается из команды печати:
Отображение оболочки Windows
Я бы хотел, чтобы она возвращала значение названия компании (Компания A, Компания B, Компания C), когда извлекается из form.opts.data, а не из имени объекта, если это имеет смысл. Надеюсь, у меня там все это есть.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ase-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»