2017-04-19 63 views
1

我想在我的數據庫模型之一中創建一個slug字段。我正在使用Flask-SQLAlchemy和Flask-Admin。我的等級定義爲:Slug字段在SQL Alchemy/FlaskAdmin

class Merchant(db.Model): 
    __tablename__ = 'merchants' 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String()) 
    ... 
    slug = db.Column(db.String()) 

    def __repr__(self): 
     return 'Merchant: {}'.format(self.name) 

我試圖從這個question實現這樣的事情:

def __init__(self, *args, **kwargs): 
     if not 'slug' in kwargs: 
      kwargs['slug'] = slugify(kwargs.get('name', '')) 
     super().__init__(*args, **kwargs) 

然而,當我創建使用燒瓶管理的新商家這是行不通的。

在試圖確定原因時,我將init函數更改爲print kwargs。當我在Flask-Admin中創建一個新商戶時,它會打印{},但是當我在python shell中執行此操作時,它會打印{'name' : 'test'}

有誰知道我可以如何訪問從Flask-Admin傳遞給我的類的參數嗎?

回答

1

看起來Flask-Admin在初始化新對象時沒有傳遞構造函數參數,並且代碼沒有任何影響。我沒有檢查的源代碼,但他們可以做這樣的事情:

m = Merchant() 
... 
m.name = 'foo' 

我覺得你最好的選擇,如果你想繼續使用燒瓶管理員將延長ModelView貫徹on_model_change鉤:

class MerchantModelView(BaseModelView): 

    def on_model_change(self, form, model, is_created): 
     if is_created and not model.slug: 
      model.slug = slugify(model.name) 

您可以在the documentation以上詳細信息。

+0

太棒了。謝謝。 – GMarsh

+0

@GMarsh感謝編輯,我忘了那:) –