나는 개체의 계층 구조와 이에 해당하는 스키마 계층 구조를 가지고 있습니다. 이 계층 구조의 중간 레벨에있는 스키마는 상속 된 특정 필드를 제외합니다. 그 스키마는이 배제를 "상속"합니다 그것으로부터 상속 기대하는, 그러나 이것은 그들의 메타 클래스에 자신의 제외 필드를 추가 할 경우 사건이 될 것 같습니다하지 않습니다 :수퍼 스키마 (marshmallow)에서 "exclude"메타 매개 변수 상속
예에서from marshmallow import fields
from marshmallow.schema import Schema
class AncestorSchema(Schema):
a = fields.Str()
b = fields.Str()
class IntermediateSchema(AncestorSchema):
c = fields.Str()
class Meta:
exclude = ('b',)
class FinalSchema(IntermediateSchema):
d = fields.Str()
class Meta:
exclude = ('c',)
value = dict(
a="Field A",
b="Field B",
c="Field C",
d="Field D"
)
print(IntermediateSchema().dump(value).data)
>>> {'c': 'Field C', 'a': 'Field A'}
print(FinalSchema().dump(value).data)
>>> {'d': 'Field D', 'a': 'Field A', 'b': 'Field B'}
위, FinalSchema
상속을에서 IntermediateSchema
(필드 b
제외)이며 클래스의 c
필드는 제외됩니다. 예상되는 동작은 결과 스키마가 b
과 c
을 모두 제외하지만 실제로는 c
만 제외한다는 것입니다.
물론 superschema의 제외 필드는 상속되는 스키마의 제외 된 필드를 수동으로 포함 할 수 있지만 상속의 대상이 아니며 성가신 일입니다.
원하는 동작을 우아한 방법으로 구현할 수 있는지 또는 스키마 상속의 현재 동작이 실제로 버그인지 궁금합니다.
marshmallow의 소스 코드를 검사하면 superschemas의 메타 클래스에서 데이터의 상속이 부분적으로 지원된다는 것을 알 수 있습니다 (즉, ordered
메타 옵션 값이 superschemas에서 상속 됨).