gpt4 book ai didi

python - SQLAlchemy/Flask Admin 中的 Slug 字段

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:34 25 4
gpt4 key购买 nike

我正在尝试在我的一个数据库模型中创建一个 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 中创建一个新的 Merchant 时,它会打印 {},但是当我在 python shell 中执行此操作时,例如 Merchant(name ='test'),它打印 {'name' : 'test'}.

有谁知道我如何访问从 Flask-Admin 初始化时传递给我的类的参数?

最佳答案

看起来 Flask-Admin 在初始化新对象时没有传递构造函数参数,并且您的代码没有任何效果。我还没有检查源代码,但他们可能会做类似的事情:

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

我认为,如果您想继续使用 Flask-Admin,最好的选择是扩展 ModelView 并实现 on_model_change Hook :

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 中找到更多信息.

关于python - SQLAlchemy/Flask Admin 中的 Slug 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43496954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com