Получить список с HTML-формой и сохранить его в базе данных SQLalchemy Flask Python - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь получить список значений из HTML-формы с помощью Flask и сохранить его в столбце в базе данных.Я пытался использовать getlist (), но я не знаю, как мне правильно это сделать.

База данных:

association_table = Table('association', Base.metadata,
    Column('book_id', Integer, ForeignKey('Book.id')),
    Column('form_id', Integer, ForeignKey('Form.id'))
    )

class Book(Base):
__tablename__ = 'Book'
name = Column(String(80), nullable = False, unique=True)
id = Column(Integer, primary_key = True)
author = Column(String(30))
language = Column(String(30))
category_id = Column(Integer, ForeignKey('Category.id'), nullable = False)
category = relationship(Category)
forms = relationship("Form", secondary=association_table, back_populates="books")

def __repr__(self):
    return '<Book %r>' % self.name
class Form(Base):
__tablename__ = 'Form'
name = Column(String, nullable = False)
id = Column(Integer, primary_key=True)
books = relationship("Book", secondary=association_table, back_populates="forms")

def __repr__(self):
    return self.name

NEW BOOK Шаблон:

<p>Choose Form</p>
<select name=form method="GET" action="/" multiple> 
{% for form in forms %}
<option value= "{{form}}" SELECTED>{{ form }}</option>"
{% endfor %}
</select>

Маршрут:

@app.route('/books/new/', methods=['GET', 'POST'])
def newBook():
    categories = session.query(Category).all()
    forms = session.query(Form).all()
    #languages = session.query(Languages).all()
    if request.method == 'POST':
        newBook = Book(name = request.form['name'], 
                        author = request.form['author'], 
                        category = Category(name=request.form.get('category')),
                        forms = Form(name=request.form.getlist('form')),
                        language = request.form['language'])
        session.add(newBook)
        session.commit()
        flash("New Book Added!")
        return redirect(url_for('showBooks'))
    else:
        return render_template('newBook.html', languages=languages, categories=categories, forms=forms)

Когда я пытаюсь добавить новую книгу, я получаю TypeError: Несовместимый тип коллекции: Форма не похожа на список

1 Ответ

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

Когда вы создаете экземпляр Book, вы должны передать список экземпляра Form конструктору Book.

book = Book(name=request.form["name"],
            author=request.form["author"],
            language=request.form["language"],
            category=request.form["category"],
            forms=[Form(name) for name in request.form.getlist("form")])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...