【问题标题】:Flask: TypeError: blog() got an unexpected keyword argument 'user'Flask: TypeError: blog() got an unexpected keyword argument 'user'
【发布时间】:2020-07-30 00:47:04
【问题描述】:

我有一个模型“博客”,我正在尝试创建它的实例并将其添加到数据库中。但是,当我尝试创建实例时,我收到错误TypeError: blog() got an unexpected keyword argument 'user',当我删除参数用户时,它会说:TypeError: blog() got an unexpected keyword argument 'title' 等等所有参数。
代码:

型号:

class blog(db.Model):
    _id = db.Column("id", db.Integer, primary_key=True)
    user = db.Column("user", db.String)
    title = db.Column("title", db.String())
    body = db.Column("body", db.String())
    images = db.Column("images", ScalarListType())
    def __init__(self, user, title, body, images):
        self.user = user
        self.title = title
        self.body = body
        self.images = images

功能:

@app.route('/add_blog', defaults={'realfiles': ""}, methods=['GET', 'POST'])
@app.route('/add_blog:<realfiles>', methods=['GET', 'POST'])
def add_blog(realfiles):
    if request.method == "POST":
        title = request.form["title"]
        body = request.form["body"]
        images = realfiles
        user = '1'
        new_blog = blog(user = user, title = title, body = body, images = images)
        for f in realfiles.split(','):
            os.rename(os.path.join(app.root_path, 'static\\temp', f), os.path.join(app.root_path,'static\\uploads', f))
        db.session.add(new_blog)
        db.session.commit()
        flash(f"added the blog {new_blog.title}!")
        return redirect(url_for("home"))
    if realfiles == "":
        return render_template("add_blog.html")
    return render_template("add_blog.html", realfiles=realfiles.split(','))

参数realfiles是一个字符串。

编辑:

我尝试更改属性的名称,重新启动计算机,删除数据库并创建一个新的,以上都不起作用

编辑 1: 我将变量更改为“名称”而不是“用户”。还是行不通。 这是完整的回溯

TypeError
TypeError: blog() got an unexpected keyword argument 'name'

Traceback (most recent call last)
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\_compat.py", line 39, in reraise
raise value
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\user\.virtualenvs\JoelBlog-UELb-k-q\Lib\site-packages\flask\app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "D:\Google Drive\PythonProjects\JoelBlog\app.py", line 96, in add_blog
new_blog = blog(name = user, title = title, body = body, images = images)
TypeError: blog() got an unexpected keyword argument 'name'

你能帮忙吗? 谢谢

【问题讨论】:

  • 您是否在代码中的某个位置重新定义了blog,或者有两个完全不同类型的blog 导入?
  • 没有,我刚刚又检查了一遍
  • 拜托,你的类名应该是博客而不是博客,这很混乱。你也不应该有 init 。或者你也必须调用超类 init。
  • 问题可能来自您的 db.String,它应该是 db.String()。 String 是一个类,String() 是一个对象。并且您的数据库可能需要一个长度。
  • @Victor 我将 () 添加到字符串中,一切正常,不需要删除 init。如果你把它写成答案,我可以接受!

标签: python flask flask-sqlalchemy


【解决方案1】:

失败的原因是您有一个不需要键/值参数的 init 函数。如果没有 init,那么您可以在尝试时调用它。根据您的调用方式,您将使用 def init(self, **kwargs),然后使用 kwargs.get(...)。

class blog(db.Model):
    _id = db.Column("id", db.Integer, primary_key=True)
    user = db.Column("user", db.String)
    title = db.Column("title", db.String())
    body = db.Column("body", db.String())
    images = db.Column("images", ScalarListType())
    def __init__(self, **kwargs):
        self.user = kwargs.get('user')
        self.title = kwargs.get('title')
        self.body = kwargs.get('body')
        self.images = kwargs.get('images')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2015-02-21
    • 2021-01-19
    • 1970-01-01
    • 2022-01-12
    • 2015-09-23
    • 1970-01-01
    相关资源
    最近更新 更多