Search code examples
pythonflaskflask-admin

FLask-admin , generatable fields


There is a model

class Article(db.Model, Base):
    id = db.Column(db.Integer(), primary_key=True)
    title = db.Column(db.String())
    description = db.Column(db.Text())
    url = db.Column(db.String())

    created_on = db.Column(db.DateTime(), server_default=db.func.now())
    updated_on = db.Column(db.DateTime(), server_default=db.func.now(), onupdate=db.func.now())

    author = db.Column(db.Integer(), db.ForeignKey('user.id'))
    category = db.Column(db.Integer(), db.ForeignKey('category.id'))

    def __init__(self, title="", description="", author="", category=""):
        self.title = title
        self.author = author
        self.category = category
        self.description = description

        self.url = slugify(title)

flask-admin generate this form for this model click here

Problem: when i create new record, url field is empty.


Solution

  • You can override flask-admin save method, like this:

    class Article(db.Model, Base):
            id = db.Column(db.Integer(), primary_key=True)
            title = db.Column(db.String())
            description = db.Column(db.Text())
            url = db.Column(db.String())
    
            created_on = db.Column(db.DateTime(), server_default=db.func.now())
            updated_on = db.Column(db.DateTime(), server_default=db.func.now(), onupdate=db.func.now())
    
            author = db.Column(db.Integer(), db.ForeignKey('user.id'))
            category = db.Column(db.Integer(), db.ForeignKey('category.id'))
    
            def save(self, *args, **kwargs):
                 self.url = slugify(self.title)
                 return super(Article, self).save(*args, **kwargs)