apiflask的Schema里,使用List类型,提示The list elements must be a subclass

想做一个批量删除用户的功能,想用一个list做入参,
Schema的代码如下

from apiflask import Schema
from apiflask.fields import List,Nested


class IDReq(Schema):
    user_id = List(required=True,description="ID",cls_or_instance=int)

报错信息如下:

  File "E:\Env\TestFlask\lib\site-packages\marshmallow\utils.py", line 320, in resolve_field_instance
    raise FieldInstanceResolutionError
marshmallow.exceptions.FieldInstanceResolutionError
......
  File "E:\Env\TestFlask\lib\site-packages\marshmallow\fields.py", line 736, in __init__
    raise ValueError(
ValueError: The list elements must be a subclass or instance of marshmallow.base.FieldABC.

根据你的描述,我的理解是:你希望列表内的元素是int类型。
这里int貌似是python的内置类型,根据apiflask源码中的注释,应该这么修改:

from apiflask import Schema
from apiflask.fields import List, Integer


class IDReq(Schema):
    user_id = List(required=True,description="ID",cls_or_instance=Integer)
1 个赞

如果是想要获得一个列表的整型数字,那么应该用 Integer 字段:

from apiflask import Schema
from apiflask.fields import List, Integer


class IDReq(Schema):
    user_id = List(Integer(), required=True, description="ID")

List() 的第一个参数是列表内部元素的字段类。

噢,用这个关键字或是作为第一个位置参数传递都是一样的……

1 个赞

多谢帮忙解决问题

如果请求的request里面的body是这种形式?该如何写呢
[
{‘name’:‘zhangsan’,‘category’:‘a’},{‘name’:‘lisi’,‘category’:‘b’}
]

many=True

1 个赞