ordered = True 不被尊重。 python + 棉花糖 + 烧瓶
ordered = True not respected. python + marshmallow + Flask
又是我,现在有一个棉花糖问题,我有以下结构:
route.py
@models.response(ParentSchema())
def get(args, model_id):
return {"response": {"a": [{"data": "a"}], "b": [{"data": "a"}], "c": [{"data": "a"}], "d": [{"data": "a"}]}}
那么这是我的模式文件
schema.py
class SubChildSchema(Schema):
data = fields.Str(description="Model's name")
class ChildSchema(Schema):
class Meta:
ordered = True
a = fields.Nested(SubChildSchema, many=True)
b = fields.Nested(SubChildSchema, many=True)
c = fields.Nested(SubChildSchema, many=True)
d = fields.Nested(SubChildSchema, many=True)
class ParentSchema(Schema):
response = fields.Nested(ChildSchema)
它假设在响应中我应该得到像这样的排序响应:
{
"response": {
"a": [
{
"data": "a"
}
],
"b": [
{
"data": "a"
}
],
"c": [
{
"data": "a"
}
],
"d": [
{
"data": "a"
}
]
}
}
但我收到的不是那个
{
"response": {
"b": [
{
"data": "a"
}
],
"c": [
{
"data": "a"
}
],
"d": [
{
"data": "a"
}
],
"a": [
{
"data": "a"
}
]
}
}
看起来 属性 ordered=True 在 ChildSchema class 上不起作用
我一直在一些帖子中寻找它,看起来当您混合嵌套字段和有序 属性.
时会出现问题
这是我的堆栈
flask-marshmallow==0.14.0
marshmallow==2.21.0
marshmallow-sqlalchemy==0.23.1
我看到您可以尝试两种不同的策略:
在应用定义之后将此配置行添加到您的代码中:
app = Flask (__ name__)
app.config ['JSON_SORT_KEYS'] = False
抑制 flask 字典键排序并强制遵守定义的顺序。
您也可以尝试在 ParentSchema class 中添加相同的排序键元,因为 ChildSchema 包含在 ParentSchema 中;我们也需要指定 ParentSchema 来遵守键顺序。
类似
class ParentSchema(Schema):
class Meta:
ordered = True
response = fields.Nested(ChildSchema)
祝你好运
又是我,现在有一个棉花糖问题,我有以下结构:
route.py
@models.response(ParentSchema())
def get(args, model_id):
return {"response": {"a": [{"data": "a"}], "b": [{"data": "a"}], "c": [{"data": "a"}], "d": [{"data": "a"}]}}
那么这是我的模式文件 schema.py
class SubChildSchema(Schema):
data = fields.Str(description="Model's name")
class ChildSchema(Schema):
class Meta:
ordered = True
a = fields.Nested(SubChildSchema, many=True)
b = fields.Nested(SubChildSchema, many=True)
c = fields.Nested(SubChildSchema, many=True)
d = fields.Nested(SubChildSchema, many=True)
class ParentSchema(Schema):
response = fields.Nested(ChildSchema)
它假设在响应中我应该得到像这样的排序响应:
{
"response": {
"a": [
{
"data": "a"
}
],
"b": [
{
"data": "a"
}
],
"c": [
{
"data": "a"
}
],
"d": [
{
"data": "a"
}
]
}
}
但我收到的不是那个
{
"response": {
"b": [
{
"data": "a"
}
],
"c": [
{
"data": "a"
}
],
"d": [
{
"data": "a"
}
],
"a": [
{
"data": "a"
}
]
}
}
看起来 属性 ordered=True 在 ChildSchema class 上不起作用 我一直在一些帖子中寻找它,看起来当您混合嵌套字段和有序 属性.
时会出现问题这是我的堆栈
flask-marshmallow==0.14.0
marshmallow==2.21.0
marshmallow-sqlalchemy==0.23.1
我看到您可以尝试两种不同的策略:
在应用定义之后将此配置行添加到您的代码中:
app = Flask (__ name__)
app.config ['JSON_SORT_KEYS'] = False
抑制 flask 字典键排序并强制遵守定义的顺序。
您也可以尝试在 ParentSchema class 中添加相同的排序键元,因为 ChildSchema 包含在 ParentSchema 中;我们也需要指定 ParentSchema 来遵守键顺序。
类似
class ParentSchema(Schema):
class Meta:
ordered = True
response = fields.Nested(ChildSchema)
祝你好运