Flask-Admin - 内联模型不适用于名为 'id' 以外的字段
Flask-Admin - Inline Model not working with field named something other than 'id'
我正在查看内联模型并一直在测试此处的示例:
https://github.com/mrjoes/flask-admin/tree/master/examples/sqla-inline
我注意到如果 LocationImage model/table 的主键字段重命名为 ID 以外的其他内容,则不会触发 after_delete 处理程序。
所以这行得通
class LocationImage(db.Model):
id = db.Column(db.Integer, primary_key=True)
alt = db.Column(db.Unicode(128))
path = db.Column(db.String(64))
location_id = db.Column(db.Integer, db.ForeignKey(Location.id))
location = db.relation(Location, backref='images')
@event.listens_for(LocationImage, 'after_delete')
def _handle_image_delete(mapper, conn, target):
try:
if target.path:
os.remove(op.join(base_path, target.path))
except:
pass
但是如果我像这样重命名 id 列,
image_id = db.Column(db.Integer, primary_key=True)
那么 _handle_image_delete 不会被调用。
我无法理解此字段的指定位置以及如何使其与名称不是 'id' 的 PK 一起使用。
谢谢
在field_list.html中,为主键呈现了一个隐藏字段。您需要更改它以输出重命名的字段 {{ field.form.image_id }}
.
{% import 'admin/model/inline_list_base.html' as base with context %}
{% macro render_field(field) %}
{% set model = field.object_data %}
{% if model and model.path %}
{{ field.form.image_id }}
<img src="{{ url_for('static', filename=model.path) }}" style="max-width: 300px;"></img>
{% else %}
{{ field }}
{% endif %}
{% endmacro %}
{{ base.render_inline_fields(field, template, render_field) }}
我正在查看内联模型并一直在测试此处的示例:
https://github.com/mrjoes/flask-admin/tree/master/examples/sqla-inline
我注意到如果 LocationImage model/table 的主键字段重命名为 ID 以外的其他内容,则不会触发 after_delete 处理程序。
所以这行得通
class LocationImage(db.Model):
id = db.Column(db.Integer, primary_key=True)
alt = db.Column(db.Unicode(128))
path = db.Column(db.String(64))
location_id = db.Column(db.Integer, db.ForeignKey(Location.id))
location = db.relation(Location, backref='images')
@event.listens_for(LocationImage, 'after_delete')
def _handle_image_delete(mapper, conn, target):
try:
if target.path:
os.remove(op.join(base_path, target.path))
except:
pass
但是如果我像这样重命名 id 列,
image_id = db.Column(db.Integer, primary_key=True)
那么 _handle_image_delete 不会被调用。
我无法理解此字段的指定位置以及如何使其与名称不是 'id' 的 PK 一起使用。
谢谢
在field_list.html中,为主键呈现了一个隐藏字段。您需要更改它以输出重命名的字段 {{ field.form.image_id }}
.
{% import 'admin/model/inline_list_base.html' as base with context %}
{% macro render_field(field) %}
{% set model = field.object_data %}
{% if model and model.path %}
{{ field.form.image_id }}
<img src="{{ url_for('static', filename=model.path) }}" style="max-width: 300px;"></img>
{% else %}
{{ field }}
{% endif %}
{% endmacro %}
{{ base.render_inline_fields(field, template, render_field) }}