- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的 RESTful flask 应用程序中使用 sqlalchemy 和 marshmallow 来序列化我的模型。我有一个 hybrid_property,它来 self 在该模型上的一个关系。我现在想使用相关模型中的模式在我的模式中序列化该 hybrid_property。
有人做过吗?这是我的相关代码。当我检查响应时,它似乎没有在模型的序列化版本中包含 last_assessment
class Person(db.Model):
daily_rula_average_ranges = db.relationship('DailyRulaAverageRange', order_by="DailyRulaAverageRange.date", back_populates='person')
@hybrid_property
def last_assessment(self):
if self.daily_rula_average_ranges.length > 0:
return self.daily_rula_average_ranges[-1]
class PersonSchema(ma.Schema):
last_assessment = ma.Nested(DailyRulaAverageRangeSchema, only=['id', 'date', 'risk'])
class Meta:
fields = ('last_assessment')
最佳答案
这有点偷偷摸摸,但我认为问题在于行 if self.daily_rula_average_ranges.length > 0:
导致引发 AttributeError,因为长度通常不是列表的属性.你的意思可能是 if len(self.daily_rula_average_ranges) > 0:
。
这是一个与 ORM 无关的示例 - 如果引发属性错误,序列化程序不返回任何字段,但如果属性返回适当的数据,则返回数据正常:
from marshmallow import fields, Schema
from marshmallow.fields import Nested
class DailyRulaAverageRangeSchema(Schema):
id=fields.UUID()
date=fields.Date()
risk=fields.Integer()
class PersonSchema(Schema):
last_assessment = Nested(DailyRulaAverageRangeSchema, only=['id', 'date', 'risk'])
class Meta:
fields = ('last_assessment',)
class Person(object):
@property
def last_assessment(self):
raise AttributeError('oops')
PersonSchema().dump(Person())
# Out[73]: {}
class Person(object):
@property
def last_assessment(self):
return {"id": None, "date":None, 'risk': 100}
PersonSchema().dump(Person())
# Out[83]: {u'last_assessment': {u'date': None, u'id': None, u'risk': 100}}
marshmallow 的这种行为并不奇怪,因为引发 AttributeError 的属性看起来好像该属性不存在,例如:
class Person(object):
@property
def last_assessment(self):
raise AttributeError('oops')
hasattr(Person(), 'last_assessment')
# Out: False
关于python - 使用棉花糖序列化 sqlalchemy hybrid_property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650500/
我正在尝试构建一个事件预订系统作为学习 Python 和 Web 开发的副项目。以下是我的项目中实现的两个模型。 EventSlot 表示为特定事件安排的时间段。 模型 from app import
我正在使用 sqlalchemy 将外部进程生成的一些数据存储在 postgres 数据库中。外部数据有几个存储为字符串的日期,我想将其用作日期时间对象以进行比较和持续时间计算,并且我希望在数据模型中
我有一个 hybrid_property 执行一些条件并返回响应。我希望能够针对该字段进行查询,因此我创建了一个 expression。但是,我不确定如何为这种用例编写条件。 如何编写一个表达式,根据
我在我的 RESTful flask 应用程序中使用 sqlalchemy 和 marshmallow 来序列化我的模型。我有一个 hybrid_property,它来 self 在该模型上的一个关系
我在 SQLAlchemy 模型中定义了以下 @hybird_property 和 表达式: class Widget(db.Model): # ... @hybrid_propert
我正在尝试使用 Flask-SQLAlchemy 从有序的多对多关系中获取第一个对象。 我想使用混合属性来实现这一点,这样我就可以以一种干净的方式重用我的代码。 这是代码,有一些注释: class P
我有一个相当复杂的 hybrid_property。这是一个供应商模型,它有多个 skuchannels(产品)。它的作用是:根据 target_stock_duration(例如,我们希望将商品存货
代码很简单: Class A(Base): status = Columns(Integer) @hybrid_property def is_ok(self):
在使用 Flask-Admin 创建的 ListView 中,我添加了一个 sqlalchemy 对象的两列,它们实际上是在我的对象类中使用混合属性计算的。 class MyClass(db.Mode
当我尝试按名称从映射器获取属性时,如果指定了 hybrid_property 名称,我将无法执行此操作。 import datetime from sqlalchemy import create_e
我有一个模型(我将其用作抽象基类),它具有一些常见的方法和属性。 SQLAlchemy 允许使用 @hybrid_property 创建属性和方法和 @hybrid_method ,也是标准@prop
我有一个现有的、可用的 Flask 应用程序,它使用 SQLAlchemy。这个应用程序中的几个模型/表有存储原始 HTML 的列,我想在列的 setter 上注入(inject)一个函数,以便传入的
如何将这两者结合起来: Werkzeug 的 @cached_property 装饰器:http://werkzeug.pocoo.org/docs/0.11/utils/#werkzeug.util
我是一名优秀的程序员,十分优秀!