我正在使用flask-marshmallow(marshmallow=v3.0.0rc1,flask-marshmallow=0.9.0)和flask-sqlalchemy(sqlalchemy=1.2.16,flask-sqlalchemy=2.3.2)
我有这个模型和架构。
from marshmallow import post_load, fields
from .datastore import sqla_database as db
from .extensions import marshmallow as ma
class Study(db.Model):
_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, nullable=False)
tests = db.relationship("Test", backref="study", lazy='select', cascade="all, delete-orphan")
@property
def test_count(self):
return len(self.tests)
class StudySchema(ma.ModelSchema):
test_count = fields.Integer(dump_only=True)
class Meta:
model = Study
sqla_session = db.session
schema = StudySchema()
payload = request.get_json()
schema.load(data=payload, instance=Study.query.get(payload["_id"]))
schema.session.commit()
如果我使用此有效负载执行 PUT 操作{'_id': 1, 'name': 'Study1', 'test_count': 0}
我得到以下异常marshmallow.exceptions.ValidationError: {'test_count': ['Unknown field.']}
如果我删除dump_only=True
我得到这个异常AttributeError: can't set attribute
这对我来说很有意义,因为它试图在模型类上设置没有 setter 方法的 test_count 。
我不明白的是为什么该属性没有被忽略dump_only
。为什么棉花糖在加载过程中仍然尝试验证和理解这个字段,当它被标记为dump_only
?