2

我有一个项目,文章的价格根据它们的位置而不同。

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-restfulflask-restplus)中他们谈论了另一种方式,但我无法使其工作如下:

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

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

4

1 回答 1

1

这是文档中的一个示例(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.

于 2018-07-16T08:07:55.440 回答