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

How to validate the length of nested items in a serializer?

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

{
  "category" : <category-id>,
  "items" : [{"title": <title>}, {"title": <title>}, {"title": <title>}, ....]
}

我有一个接受这本词典的ItemListSerializer。 category 是 Category 模型的外键,因此我们获得了该数据。类别有一个限制 属性 其中

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

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

在序列化程序上使用 validate() 方法检查长度,如果没有通过则提高 ValidationError:

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

      def validate(self, attrs):
           if len(attrs['items']) > YOUR_MAX:
               raise serializers.ValidationError("Invalid number of items")

您可以创建 validate_items()

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

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")