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) }}