我有一个简单的数据库模型,它引用自身,以创建层次结构。现在我想构建一个 RESTapi,使用 Flask、Flask-SQLAlchemy 和 Flask-marshmallow。为方便起见,我继承了我的模式类ma.SQLAlchemyAutoSchema
(flask-marshmallow 的实例在哪里ma
)
如果模型有孩子,我希望我的端点返回类别对象,包括指向返回孩子的端点的链接。(效果很好。)但如果模型没有孩子,则不应包含链接。
我的直觉告诉我,您可以并且可能应该直接在模式定义中设置它。
#model.py
from app import db
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True, index=True)
parent_id = db.Column(db.Integer, db.ForeignKey("category.id", ondelete="SET NULL"))
children = db.relationship("Category",
backref=db.backref('parent', remote_side=[id]),
lazy="dynamic")
#schema.py
from app import model, ma, db
class CategorySchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = model.Category
_links = ma.Hyperlinks({
'children': ma.URLFor('api.category_children', equipment_id="<id>")
if model.Category.query.filter_by(id=??????).first().children.first() else None
})
我想出了上面的简单三元赋值,但我不知道从哪里获取 id ( id=??????
) (与ma.URLFor()
via 访问的 id 完全相同equipment_id="<id>"
)。
预期的示例输出,如果存在子级
{
"_links": {
"children": "/api/v1/category/1/children"
},
"id": 1,
"name": "some_name"
}
预期的示例输出,如果不存在子级:
{
"_links": {
"children": null
},
"id": 1,
"name": "some_name"
}
先感谢您