我有一个项目,文章的价格取决于他们的位置。
Article
和ArticlePrice
模型如下:
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import relationship
db = SQLAlchemy()
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255), nullable=False)
description = db.Column(db.Text)
prices = relationship("ArticlePrice")
class ArticlePrice(db.Model):
__tablename__ = 'article_prices'
id = db.Column(db.Integer, primary_key=True)
article_id = db.Column(db.Integer, db.ForeignKey("article.id"), nullable=False)
location_id = db.Column(db.Integer, db.ForeignKey("location.id"), nullable=False)
price = db.Column(db.Integer, nullable=False)
location = relationship('Location')
我不想将文章的所有价格都退还给客户,而只是他的位置价格。比如他收到的JSON就像:
{
id: '',
title: '',
description: '',
price: 0
}
所以我的架构现在看起来像这样:
article = namespace.model('Article', {
'id': fields.Integer(required=True),
'title': fields.String(required=True),
'description': fields.String(required=True),
'price': fields.Integer(attribute=lambda x: x.prices[0].price), # This one works
})
这很好带有 lambda表达式,但在文档(flask-restful和flask-restplus)中他们谈到了另一种方式,但是我无法按照以下方式工作:
'price': fields.Integer(attribute='prices[0].price') # This one doesn't work
我错过了什么?为什么最后一种语法不起作用?我误解了这种语法吗?
答案 0 :(得分:0)
以下是文档(http://flask-restplus.readthedocs.io/en/stable/marshalling.html#renaming-attributes)中的示例:
model = {
'name': fields.String(attribute='people_list.0.person_dictionary.name'),
'address': fields.String,
}
所以只需将[0]
替换为.0.