我有一個flask_sqlalchemy模型,我想使用SQLAlchemyAutoSchema序列化它的實體和它的實體串列:
class TestModel(Model):
id = Column(Integer, primary_key=True)
test_comments = relationship("TestCommentModel", backref=backref("test", lazy="joined"),
lazy="dynamic", foreign_keys="TestCommentModel.test_id")
def find_by_id( ... #
def find_all(... #
class TestSchema(ma.SQLAlchemyAutoSchema):
test_comments = ma.Nested(TestCommentSchema, many=True)
class Meta:
model = TestModel
dump_only = ("id",)
load_instance = True
include_fk = False
為此,我創建了上述類的兩個實體,如下所示:
test_schema = TestSchema()
test_list_schema = TestSchema(many=True)
test = TestModel.find_by_id(test_id)
serialized_test = test_schema.dump(test)
tests = TestModel.find_all()
serialized_tests = {"tests": test_list_schema.dump(tests)}
那么什么是serialized_test?這就是我想要的,它看起來像這樣:
{"id":1, "comments": ["id": 1, "id":2]}
什么是serialized_tests?它看起來像這樣:
{"tests": [
{"id":1, "comments": ["id": 1, "id":2]},
{"id":2, "comments": ["id": 3, "id":4]},
]
}
但我不需要評論。我只需要:
{"tests": [
{"id":1},
{"id":2},
]
}
如何在不必重新定義另一個 TestSchema(例如 TestListSchema)的情況下擁有它?
如果我能做這樣的事情,那將非常有幫助:
test_schema = TestSchema()
test_list_schema = TestSchema(many=True)}
test_list_schema = test_list_schema.pop(test_comment) # Pseudo Code
我實際上想要做的是從實體中洗掉類屬性。
如何做到這一點的任何解決方案?
或者,如果我可以有條件地向類添加屬性
# Pseudo code
class TestSchema(ma.SQLAlchemyAutoSchema):
if not many:
test_comments = ma.Nested(TestCommentSchema, many=True)
class Meta:
model = TestModel
dump_only = ("id",)
load_instance = True
include_fk = False
任何解決方案?
uj5u.com熱心網友回復:
只需執行以下操作:
test_list_schema = TestSchema(many=True, exclude=("test_comments",)) # Don't forget the comma
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/349230.html
標籤:烧瓶 烧瓶-sqlalchemy 烧瓶棉花糖
