如何验证序列化器中嵌套项目的长度?

Amo*_*kar 3 python django django-rest-framework

我正在使用 Django Rest Framework 2.4。在一个 API 中,我期望一个包含两个键的字典:

{
  "category" : <category-id>,
  "items" : [{"title": <title>}, {"title": <title>}, {"title": <title>}, ....]
}
Run Code Online (Sandbox Code Playgroud)

我有一个ItemListSerializer接受这本词典的。类别是类别模型的外键,因此我们获取该数据。类别有一个极限属性

我有一个由嵌套 ItemSerializer 处理的项目列表,其中许多设置为 True

但是,我想检查项目总数是否超过基于类别的限制?

小智 5

您可以创建一个validate_items()

Django Rest 框架会将错误显示为该字段的字段错误。所以解析响应会更容易

class YourSerializer(serializers.Serializer):
    items = ItemSerializer(many=True)

    def validate_items(self, items):
        if len(items) > YOUR_MAX:
            raise serializers.ValidationError("Invalid number of items")
Run Code Online (Sandbox Code Playgroud)