无法在Flask中将数据写入db

问题描述 投票:0回答:1

我正在使用Flask中的小型阅读跟踪应用程序。我似乎无法从我的一条路线写下数据,如下:

@app.route('/add_book', methods=['GET', 'POST'])
@login_required
def add_book():
    form=BookForm()
    if request.method=='POST':
        if form.validate_on_submit():
            book=Book(
                title=form.title.data,
                author=form.author.data,
                # category=form.category.data,
                # added_on=form.added_on.data,
                # done=form.done.data,
                user_id=current_user
                )

            db.session.add(book)
            db.session.commit()
            flash('Book added')
            return redirect(url_for('books'))
        else:
            flash('ERROR. The book not added.')

    return render_template('add_book.html', form=form)

这是相应的HTML:

{% extends "layout.html" %}

{% block content %}

{% if form %}

    <form action="{{ url_for('add_book') }}" method="post">
      {{ form.hidden_tag() }}

        {{ form.title.label }}<br>
        {{ form.title() }}<br>

        {{ form.author.label }}<br>
        {{ form.author(cols=32, rows=4) }}<br>

       <!-- {{ form.category.label }}<br>
        {{ form.category() }}<br> -->

        {{ form.submit() }}

    </form>

    {% endif %}

{% endblock %}

页面呈现时,将显示书籍和作者的标签和表单,但是在单击“提交”时,数据不会保存。

代码部分类似于注册用户的部分,我不知道该做什么,因为我看不到任何错误。我使用SQLite作为数据库。

这是书模型:

class Book(db.Model):

    __tablename__='books'

    id=db.Column(db.Integer, primary_key=True)
    title=db.Column(db.String(100))
    author=db.Column(db.String(50))
    # category=db.Column(db.String(50))
    added_on=db.Column(db.DateTime, index=True, default=datetime.utcnow)
    done=db.Column(db.Boolean, default=False)
    user_id=db.Column(db.Integer, db.ForeignKey('users.id'))

    def __init__(self, title, author, added_on, done, user_id):
        self.title=title
        self.author=author
        self.added_on=added_on
        self.done=done
        self.user_id=user_id

    def __repr__(self):
        # return '<Book: Title - {0}, Author - {1}, Category - {2}>'.format(self.title, self.author, self.category)
        return '<Book: Title - {0}, Author - {1}>'.format(self.title, self.author)
sqlite flask
1个回答
0
投票

current_user是一个用户代理,可以访问所有用户属性或使用类似How to track the current user in flask-login?的内容

一个快速的解决方案是改变这条线

user_id = current_user

进入这个

user_id = current_user.id

更新:好的,我搞定了。您需要以下修复程序,每个修复程序都会导致表单验证和/或提交到数据库时出现问题: - 正如我之前所说,在book对象中使用current_user.id。 - 删除了书籍模型中的init方法。我不确定目前增加的值是什么,我收到有关已添加和完成的字段的错误消息,这些消息不在表单上。我没有花时间进一步研究它。 - 只需要if.method =='POST',因为你不需要两者。无论如何,将检查表格以进行验证。

提示:不要忘记创建一个需求文件(pip freeze - > requirements.txt),这使得在新的虚拟环境中重新安装变得更加容易。

© www.soinside.com 2019 - 2024. All rights reserved.