SQL Alchemy/FlaskAdmin 中的 Slug 字段
Slug field in SQL Alchemy/FlaskAdmin
我正在尝试在我的一个数据库模型中创建一个 slug 字段。我正在使用 Flask-SQLAlchemy 和 Flask-Admin。我的 Class 定义为:
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)
但是当我使用 Flask-Admin 创建新商户时它不起作用。
为了确定原因,我将 init 函数更改为 print kwargs
。当我在 Flask-Admin 中创建一个新商户时,它会打印 {}
,但是当我在 python shell 中创建时,如 Merchant(name ='test')
,它会打印 {'name' : 'test'}
].
有谁知道我如何在初始化时从 Flask-Admin 访问传递给我的 class 的参数?
看起来 Flask-Admin 在初始化新对象时没有传递构造函数参数,您的代码没有任何效果。我没有检查源代码,但他们可能会做类似的事情:
m = Merchant()
...
m.name = 'foo'
如果您想继续使用 Flask-Admin,我认为最好的选择是扩展 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中找到更多信息。
我正在尝试在我的一个数据库模型中创建一个 slug 字段。我正在使用 Flask-SQLAlchemy 和 Flask-Admin。我的 Class 定义为:
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)
但是当我使用 Flask-Admin 创建新商户时它不起作用。
为了确定原因,我将 init 函数更改为 print kwargs
。当我在 Flask-Admin 中创建一个新商户时,它会打印 {}
,但是当我在 python shell 中创建时,如 Merchant(name ='test')
,它会打印 {'name' : 'test'}
].
有谁知道我如何在初始化时从 Flask-Admin 访问传递给我的 class 的参数?
看起来 Flask-Admin 在初始化新对象时没有传递构造函数参数,您的代码没有任何效果。我没有检查源代码,但他们可能会做类似的事情:
m = Merchant()
...
m.name = 'foo'
如果您想继续使用 Flask-Admin,我认为最好的选择是扩展 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中找到更多信息。