【问题标题】:TypeError: __init__() takes exactly 2 arguments (1 given) FlaskTypeError: __init__() 正好需要 2 个参数(1 个给定)Flask
【发布时间】:2017-02-04 19:38:05
【问题描述】:

我了解需要为这种情况提供 default='value'。我已经咨询过 StackOverFlow 的解决方案,但无法摆脱这个错误。无论有没有默认值,我在从管理表单保存时都会收到此错误。错误在初始化函数的 Packeges 模块中。请指教。 以下是我的代码:

class Packeges(db.Model):
    __tablename__ = 'packages'
    id = db.Column(db.Integer, primary_key=True)
    package_name = db.Column(db.String(30), default='Add Package Here')
    def __init__(self, package_name):
        self.package_name = package_name


admin.add_view(ModelView(Packeges, db.session))

class UserSubscription(db.Model):
    __tablename__ = 'user_subscription'
    id = db.Column(db.Integer, primary_key=True)
    user_profile = db.Column(db.String(80), unique=True)
    package_name = db.Column(db.Integer, db.ForeignKey(Packeges.id))
    packages = db.relationship(Packeges, backref='package')
    timestamp = db.Column(db.DateTime)
    expiry = db.Column(db.DateTime)

    def __init__(self, user_profile, package_name, timestamp, expiry):
        self.user_profile = user_profile
        self.package_name = package_name
        self.timestamp = timestamp
        self.expiry = expiry
admin.add_view(ModelView(UserSubscription, db.session))

追溯:

 TypeError
TypeError: __init__() takes exactly 2 arguments (1 given)

Traceback (most recent call last)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1994, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask_admin\base.py", line 69, in inner
return self._run_view(f, *args, **kwargs)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask_admin\base.py", line 368, in _run_view
return fn(self, *args, **kwargs)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask_admin\model\base.py", line 1920, in create_view
model = self.create_model(form)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask_admin\contrib\sqla\view.py", line 1028, in create_model
Open an interactive python shell in this frameif not self.handle_view_exception(ex):
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask_admin\contrib\sqla\view.py", line 1011, in handle_view_exception
return super(ModelView, self).handle_view_exception(exc)
File "C:\Users\AliKhan\flask_ecom\env\lib\site-packages\flask_admin\contrib\sqla\view.py", line 1022, in create_model
model = self.model()

【问题讨论】:

  • 请发布完整的回溯,以便我们查看上下文(它在哪一行等)
  • 我已经更新了原始问题下的完整回溯。
  • Packeges 中的 __init__() 函数要求您至少传递一个参数(除了 self)。 ModelView(Packeges("abc"), db.session) 应该让它工作
  • 使用您提出的解决方案,我收到类似“Traceback(最近一次调用最后一次):文件“app.py”,第 124 行,在 admin.add_view(ModelView(Packeges('abc' ), db.session)) 文件“C:\Users\Alikhan\flask_ecomm\env\lib\site-packages\flask_admin\contrib\ sqla\view.py”,第 318 行,在 init menu_icon_value =menu_icon_value) 文件“C:\Users\Alikhan\flask_ecomm\env\lib\site-packages\flask_admin\model\base.py”,第 760 行,在 init 名称 = '%s' % self._prettify_class_name(model.__name__) AttributeError: 'Packeges' 对象没有属性 'name'"

标签: python flask-sqlalchemy


【解决方案1】:

尝试如下:

def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

【讨论】:

  • 请解释实际错误是什么以及要更改哪个__init__。帮助其他用户找到此问题和答案以了解问题以学习和帮助自己。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 1970-01-01
  • 2015-07-17
  • 2015-01-21
  • 1970-01-01
相关资源
最近更新 更多