Зефир, добавляющий вычисляемый столбец во время сброса (десериализация) - PullRequest
0 голосов
/ 17 марта 2019

Привет всем: у меня есть борьба с этим в течение некоторого времени.У меня есть Модель, как указано ниже:

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, и в нем я хочу вернуть задание и рассчитанное расстояние.Эта работа отлично. Вот соответствующая часть метода класса:

 # 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

Это работает отлично.Каждое задание в заданиях действительно содержит расстояние столбца

Однако, когда в моей схеме Marshmallow начинается процесс сериализации (дампа), я не знаю, что делать, чтобы вернуть расстояние к виду, так как расстояние не является частьюМодель

Как мы справимся с этим в «Зефире»?

вот все, что у меня есть в моей схеме для этой таблицы

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

Может ли кто-нибудь помочь?Спасибо.

...