棉花糖在转储过程中添加计算列(反序列化)

时间:2019-03-17 15:01:59

标签: python flask sqlalchemy flask-sqlalchemy marshmallow

大家好:我已经为此苦了一段时间。 我的模型如下:

class Job(db.Model):

    __tablename__ = "job"

    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80), nullable=False)
    city = db.Column(db.String(250), nullable=False)
    state = db.Column(db.String(10), nullable=False)
    zipCode = db.Column(db.String(10), nullable=False)
    latitude = db.Column(db.String(10), nullable=False)
    longitude = db.Column(db.String(10), nullable=False)
    description = db.Column(db.String(200), nullable=False)
    narrative = db.Column(db.String(250), nullable=False)
    companyLogo = db.Column(db.String(250), nullable=False)
    companyName = db.Column(db.String(250), nullable=False)
    companyURL = db.Column(db.String(100), nullable=False)
    time_created = db.Column(db.DateTime, nullable=False)
    active = db.Column(db.Boolean, nullable=False)

我有一个@classmethod,它使用Postgres查询,在其中我想返回Job和计算出的距离。完美的工作。这是类方法的相关部分:

 # defining an statement with a subquery that use our hybrid method
        stmt = db.session.query(
                Job,
                Job.distance(lat1, lon1).
                label('distance')).\
            subquery()

  # defining and aliases in the table to use above statement
        job_alias = aliased(Job, stmt)

        jobs = db.session.query(job_alias).\
            filter(stmt.c.distance < dst).\
            order_by(stmt.c.distance).\
            paginate(page, per_page)
        return jobs

这很好用。作业中的每个作业确实包含列距离

但是,当序列化(转储)过程在棉花糖模式中启动时,我不知道该怎么做才能将距离返回到视图,因为距离不是模型的一部分

我们如何在棉花糖中处理此问题?

这是我在此表的架构中拥有的所有内容

class JobSchema(ma.ModelSchema):

    def validate_state(state):
        """Code removed for clarity"""


    def validate_zipCode(zip):
       """Code removed for clarity"""


    @pre_load
    def get_longitude_for_zip(self, data):
         """Code removed for clarity"""

    title = fields.Str(required=True, validate=[validate.Length(min=4, max=80)])
    city = fields.Str(required=True, validate=[validate.Length(min=5, max=100)])
    state = fields.Str(required=True, validate=validate_state)
    zipCode = fields.Str(required=True, validate=validate_zipCode)
    description = fields.Str(required=False, validate=[validate.Length(max=250)])
    narrative = fields.Str(required=False, validate=[validate.Length(max=250)])
    companyLogo = fields.Str(required=False, validate=[validate.Length(max=250)])
    companyName = fields.Str(required=True, validate=[validate.Length(min=5, max=250)])
    companyURL = fields.Str(required=True, validate=[validate.Length(min=4, max=100)])
    latitude = fields.Str(required=True)
    longitude = fields.Str(required=True)
    time_created = fields.DateTime()
    active = fields.Boolean(required=True)

    class Meta:
        model = modelJob

有人可以帮忙吗? 谢谢。

0 个答案:

没有答案