在模型视图中访问模型属性 class
Access model's attrubutes inside of ModelView class
如果这是一个愚蠢的问题,请提前道歉,但我还是有点困惑。阅读烧瓶管理员文档尚未给出任何结果。
在此示例中 flask admin image upload example 有一个名为 ImageView 的自定义 ModelView:
class ImageView(sqla.ModelView):
def _list_thumbnail(view, context, model, name):
if not model.path:
return ''
return Markup('<img src="%s">' % url_for('static',
filename=form.thumbgen_filename(model.path)))
column_formatters = {
'path': _list_thumbnail
}
# Alternative way to contribute field is to override it completely.
# In this case, Flask-Admin won't attempt to merge various parameters for the field.
form_extra_fields = {
'path': form.ImageUploadField('Image',
base_path=file_path,
thumbnail_size=(100, 100, True))
}
在_list_thumbnail(view, context, model, name)
中有参数模型。在此方法内部,我可以访问模型的属性。
我的问题是如何在 _list_thumbnail(view, context, model, name)
方法之外但在 ImageView 内部访问模型及其属性?
谢谢
将模型数据传递到视图中定义的字段可能会很痛苦。但幸运的是 FileUploadField 及其子类可以获得 namegen
函数来生成名称作为参数。它接收 "dirty" 模型对象作为参数:
def name_generator(obj, file_data):
return 'file_%d.png' % obj.id
class ImageView(sqla.ModelView):
form_extra_fields = {
'path': form.ImageUploadField('Image',
base_path=file_path,
namegen=name_generator,
thumbnail_size=(100, 100, True))
}
我还发现生成的文件名可能包含文件路径,而不仅仅是文件名。
更新:正如@stamaimer 所发现的,此方法不适用于数据库中尚不存在的对象,因为它们还没有 ID。
正如我在第一个答案中评论的那样,您无法访问模型当前实例的 ID。尽管创建了实例,但它还没有提交到数据库。当前实例没有主键。但是另一个字段是存在的,也许你可以用其他字段代替主键。
如果这是一个愚蠢的问题,请提前道歉,但我还是有点困惑。阅读烧瓶管理员文档尚未给出任何结果。
在此示例中 flask admin image upload example 有一个名为 ImageView 的自定义 ModelView:
class ImageView(sqla.ModelView):
def _list_thumbnail(view, context, model, name):
if not model.path:
return ''
return Markup('<img src="%s">' % url_for('static',
filename=form.thumbgen_filename(model.path)))
column_formatters = {
'path': _list_thumbnail
}
# Alternative way to contribute field is to override it completely.
# In this case, Flask-Admin won't attempt to merge various parameters for the field.
form_extra_fields = {
'path': form.ImageUploadField('Image',
base_path=file_path,
thumbnail_size=(100, 100, True))
}
在_list_thumbnail(view, context, model, name)
中有参数模型。在此方法内部,我可以访问模型的属性。
我的问题是如何在 _list_thumbnail(view, context, model, name)
方法之外但在 ImageView 内部访问模型及其属性?
谢谢
将模型数据传递到视图中定义的字段可能会很痛苦。但幸运的是 FileUploadField 及其子类可以获得 namegen
函数来生成名称作为参数。它接收 "dirty" 模型对象作为参数:
def name_generator(obj, file_data):
return 'file_%d.png' % obj.id
class ImageView(sqla.ModelView):
form_extra_fields = {
'path': form.ImageUploadField('Image',
base_path=file_path,
namegen=name_generator,
thumbnail_size=(100, 100, True))
}
我还发现生成的文件名可能包含文件路径,而不仅仅是文件名。
更新:正如@stamaimer 所发现的,此方法不适用于数据库中尚不存在的对象,因为它们还没有 ID。
正如我在第一个答案中评论的那样,您无法访问模型当前实例的 ID。尽管创建了实例,但它还没有提交到数据库。当前实例没有主键。但是另一个字段是存在的,也许你可以用其他字段代替主键。