无法在Flask-admin上创建模型

nah*_*ahl 13 python flask flask-sqlalchemy flask-extensions

我在Flask上创建了一个简单的博客,我正在尝试使用Flask-Admin来管理我的帖子.如果我去管理区域,我可以看到来自数据库的所有帖子的列表,但是当我尝试创建一个新帖子时,我得到了下一个错误:

Failed to create model. __init__() takes exactly 4 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

这是我的帖子模型:

class Post(db.Model):
    __tablename__ = 'news'
    nid = db.Column(db.Integer, primary_key = True)
    title = db.Column(db.String(100))
    content = db.Column(db.Text)
    created_at = db.Column(db.DateTime)

    def __init__(self, title, content):
        self.title = title.title()
        self.content = content
        self.created_at = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)

这是我将模型添加到UI的代码:

from flask import Flask, session
from models import db, Post
from flask.ext.admin import Admin
from flask.ext.admin.contrib.sqlamodel import ModelView

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:pass@localhost/appname'
db.init_app(app)

admin = Admin(app)
admin.add_view(ModelView(Post, db.session))
Run Code Online (Sandbox Code Playgroud)

我可以通过管理面板编辑模型,但不能创建新模型.我知道我错过了一些非常愚蠢的东西,但我无法弄清楚它是什么.

编辑:如果我没有在模型上实现init,它就可以工作.我怎样才能解决这个问题?

Mig*_*uel 20

这里查看Flask-Admin源代码中的相关部分.

创建模型时不传递任何参数:

    model = self.model()
Run Code Online (Sandbox Code Playgroud)

所以你应该支持一个不带参数的构造函数.例如,__init__使用默认参数声明构造函数:

    def __init__(self, title = "", content = ""):
        self.title = title.title()
        self.content = content
        self.created_at = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)

  • 这是有原因的 - Flask-Admin无法猜测模型构造函数参数是什么以及它们应该作为输入接收什么. (4认同)