在Flask-Admin表单字段

时间:2018-04-19 16:46:49

标签: python flask flask-admin

我已经实现了一个类别功能,用于在简单的博客上对帖子进行排序,但Flask-Admin在创建/编辑页面的类别字段中显示查询对象表示。

我想在下拉菜单中显示每个类别的name字段,而不是查询对象表示,即:

Cool Stuff代替<Category 'Cool Stuff'>

我怀疑这可以通过使用ModelView上的form_args属性指定标签名称来完成,例如:

form_args = dict(
    category=dict(label=model.name)
)

但是,我不知道如何从ModelView类中访问模型。我找到了this answer,但它似乎是一个特定的而不是一般的解决方案,在我的案例中并不适用。

此外,source code表示该模型预计可用,但未指定如何访问该模型。

如何从ModelView中访问模型?如果这不可能,那么查询对象表示问题会有另一种解决方案吗?

编辑:

这是我到目前为止的代码:

models.py

class Post(db.Model):                                                           
    id = db.Column(db.Integer, primary_key=True)                                
    title = db.Column(db.String(80), index=True, unique=True)                   
    content = db.Column(db.UnicodeText)  # arbitrary/variable length string     
    slug = db.Column(db.String(64), index=True, unique=True)                    
    img = db.Column(db.String(64))  # url of associated image file              
    date_created = db.Column(db.DateTime, default=db.func.current_timestamp())  
    date_modified = db.Column(db.DateTime, default=db.func.current_timestamp(), onupdate=db.func.current_timestamp())             

    # Relationships                                                             
    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))

class Category(db.Model):                                                       
    id = db.Column(db.Integer, primary_key=True)                                
    name = db.Column(db.String(64), index=True, unique=True)                    
    slug = db.Column(db.String(64), index=True, unique=True)                    

    posts = db.relationship('Post', backref='category', lazy='dynamic')         
    projects = db.relationship('Project', backref='category', lazy='dynamic')   

    def __repr__(self):                                                         
        return '<Category \'{}\'>'.format(self.name)        

routes.py

class PostModelView(ProBlogModelView):                                          
    form_overrides = dict(content=CKTextAreaField)                              
    form_excluded_columns = ['id', 'slug', 'date_created', 'date_modified', ]   
    form_args = dict(                                                           
        title=dict(validators=[InputRequired()]),                               
        content=dict(validators=[InputRequired()]),                             
        img=dict(label="Image URL", validators=[InputRequired()]),              
    )

Flask-Admin似乎默认使用下拉菜单在Post模型的Edit和Create页面上显示现有类别集。该菜单中包含的选项应该是Category模型的每个实例的__repr__值,而不是其name属性。我的目标是显示名称而不是__repr__值。

我已经使用column_formatters在Post管理区域的主列表中完成了此操作,但我还不清楚如何在编辑/创建页面表单中执行相同操作。

0 个答案:

没有答案