4

我的应用程序中有几个模型,因为我将有一些视图做同样的事情(表单+表格显示我的模型中的现有记录),但由于模型的不同而实现不同,在每种情况下都会有所不同,我想知道如果有可能使它通用。

我用谷歌搜索了一下,找不到任何与我的案子相关的东西。我想达到的目标:

在我看来,我想遍历模型中传递给模板的每个对象,例如:

return render_template('addstatus.html', form=form, statuses=Status.query.all(), 
        target_model="Status", fields=Status.__mapper__.c.keys())

但我只想拥有一个视图,无论模型是什么,所以我无法提前知道模型的字段、列数等。

我想在我看来有类似的东西:

{% for obj in objects %}
   {% for field in obj.fields %} (not existing)
      <h1> {{ field }} :: {{ obj.fields.field.value }}
   {% endfor %}
{% endfor %}

有可能吗?我怎样才能做到这一点?

4

2 回答 2

4

您可以将此方法添加到您的db.Model类中(通过子类化或猴子补丁):

from sqlalchemy.orm import class_mapper, ColumnProperty
def columns(self):
    """Return the actual columns of a SQLAlchemy-mapped object"""
    return [prop.key for prop in class_mapper(self.__class__).iterate_properties
            if isinstance(prop, ColumnProperty)]

然后你可以用它{% for col in obj.columns() %}来遍历列名。

于 2013-10-07T20:38:49.137 回答
0

我有一个类似的问题,想要一些纯粹基于 Jinja2 的东西。这将返回“obj”表中的所有键/字段,对我来说效果很好:

obj.__table__.columns._data.keys()

在这里,它在您的示例代码中实现

{% for obj in objects %}
    {% for field in obj.__table__.columns._data.keys() %}
        <h1> {{ field }} :: {{ obj[field] }} </h1>
    {% endfor %}
{% endfor %}
于 2017-01-11T09:01:48.837 回答