如何将嵌套属性编组到模式?

时间:2017-12-21 03:13:14

标签: python flask sqlalchemy flask-restful flask-restplus

我有一个项目,文章的价格取决于他们的位置。

ArticleArticlePrice模型如下:

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-restfulflask-restplus)中他们谈到了另一种方式,但是我无法按照以下方式工作:

'price': fields.Integer(attribute='prices[0].price') # This one doesn't work

我错过了什么?为什么最后一种语法不起作用?我误解了这种语法吗?

1 个答案:

答案 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.