Как получить и сохранить 2 значения в одном столбце в базе данных?Python Flask SQLAlchemy - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь сохранить 2 значения в одном столбце, и я не знаю, возможно ли это вообще.

Это выглядит так. Я получаю данные из формы HTML, как показано ниже. Это работает.

<form action="{{url_for('newBook')}}" method = 'POST'>
    <p>Choose Language</p>
        <select name=language method="GET" action="/" size="2" multiple> 
        {% for language in languages %}
        <option value= "{{language}}" SELECTED>{{ language }}</option>"
        {% endfor %}
        </select>
    <p><input type='submit' value='Create'></p>
    <a href = "{{url_for('showBooks') }}">Cancel</a>
</form>

Но в базе данных хранится только одно значение.

class Book(Base):
    __tablename__ = 'Book'
    language = Column(String(30)) # how change that?

Вот так я получаю это значение.

languages = ['Polish', 'English']
@app.route('/books/new/', methods=['GET', 'POST'])
def newBook():
    if request.method == 'POST':
        newBook = Book(language = request.form['language']) # how change that?
        session.add(newBook)
        session.commit()
        flash("New Book Added!")
        return redirect(url_for('showBooks'))
    else:
        return render_template('newBook.html', languages=languages)

Этот код работает, но я получаю только английское или польское значение. Но я хочу, чтобы я мог хранить иногда оба значения. Я знаю, что можно использовать request.form.getlist, но я не нашел работающего примера и того, как сохранить его в базе данных.

1 Ответ

0 голосов
/ 16 мая 2018

Чтобы получить несколько значений из выбранного элемента, вы можете изменить свой код следующим образом:

languages = ['Polish', 'English']
@app.route('/books/new/', methods=['GET', 'POST'])
def newBook():
    if request.method == 'POST':
        newBooks = request.form.getlist('language') # this returns a list of values
        session.add(newBook)
        session.commit()
        flash("New Book Added!")
        return redirect(url_for('showBooks'))
    else:
        return render_template('newBook.html', languages=languages)

Что касается хранения их в базе данных, вы можете создать другую таблицу, которая хранит языки и ссылается наВаша таблица Book с использованием внешнего ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...