Flask-Admin returns "ValueError: Invalid format string" on clicking create for any model

Flask-Admin returns "ValueError: Invalid format string" on clicking create for any model

我有一个使用 SQLAlchemy 的现有 Flask 项目,我想与管理仪表板交互。一切正常,我设法通过使用 ModelView Class 启用身份验证,但是如果我尝试编辑或尝试创建任何数据库模型的新对象,则 Flask-Admin 会抛出以下错误:

ValueError: Invalid format string

这是我的 Flask-Admin 代码:

from flask_admin import Admin
from flask_login import current_user
from flask import redirect, url_for, request
from app import app, db, login
from flask_admin.contrib.sqla import ModelView
from app.auth.models import User
from app.forum.models import thread, post
from app.course.models import Courses
from flask_admin.model import typefmt
from datetime import date

app.config['FLASK_ADMIN_SWATCH'] = 'cerulean'

def date_format(view, value):
    return value.strftime('%d.%m.%Y')

MY_DEFAULT_FORMATTERS = dict(typefmt.BASE_FORMATTERS)
MY_DEFAULT_FORMATTERS.update({
    type(None): typefmt.null_formatter,
    date: date_format
})  

class adminmodelview(ModelView):
    column_type_formatters = MY_DEFAULT_FORMATTERS
    def is_accessible(self):
        return (current_user.is_authenticated and current_user.is_admin)

    def inaccessible_callback(self, name, **kwargs):
        return redirect(url_for('home.index'))

admin = Admin(app, name='celis', template_mode='bootstrap3')
admin.add_view(adminmodelview(User, db.session))
admin.add_view(adminmodelview(post, db.session))
admin.add_view(adminmodelview(thread, db.session))
admin.add_view(adminmodelview(Courses, db.session))

这是用户模型:


class User(UserMixin,db.Model):
    id=db.Column(db.Integer,primary_key=True)
    username=db.Column(db.String(64),index=True,unique=True)
    email=db.Column(db.String(120),index=True,unique=True)
    user_role=db.Column(db.String(20))
    is_admin=db.Column(db.Integer, default=0)
    Region=db.Column(db.String(20))
    password_hash=db.Column(db.String(128))
    threads=db.relationship('thread',backref='creator',lazy='dynamic')
    posts=db.relationship('post',backref='Author',lazy='dynamic')
    last_seen=db.Column(db.DateTime,default=datetime.utcnow)
    twitter=db.Column(db.String(120),default="N/A")
    facebook=db.Column(db.String(120),default="N/A")
    instagram=db.Column(db.String(120),default="N/A")
    birthdate=db.Column(db.String(120),default="N/A")
    Interests=db.Column(db.String(200),default="N/A")
    provides_course=db.relationship('Courses',backref="Teacher",lazy='dynamic')
    def __repr__(self):
        return '<Role:{} Name:{} Id:{}>'.format(self.user_role,self.username,self.id)
    def set_password(self,password):
        self.password_hash=generate_password_hash(password)
    def check_password(self,password):
        return check_password_hash(self.password_hash,password)
    def get_reset_token(self, expires_sec=1800):
         s = Serializer(app.config['SECRET_KEY'], expires_sec)
         return s.dumps({'id': self.id}).decode('utf-8')

在搜索时我发现这可能是由于 DateTime 演示文稿导致的问题,但无法找到解决方案。

兄弟,我遇到了与你类似的问题,异常源于我的“线程”table 中的“date_posted”字段,因为默认情况下,flask admin 将所有数据对象读取为字符串对象,因此您必须在 adminmodelview 中按如下方式覆盖它,例如: form_overrides=dict(date_posted=DateTimeField)