Привет всем: у меня есть борьба с этим в течение некоторого времени.У меня есть Модель, как указано ниже:
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
Может ли кто-нибудь помочь?Спасибо.