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

时间:2015-01-12 06:39:36

标签: python django django-rest-framework

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

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

我有ItemListSerializer接受此词典。 category是Category模型的外键,因此我们获取该数据。 category有一个限制属性

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

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

2 个答案:

答案 0 :(得分:3)

在序列化程序上使用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")

答案 1 :(得分:3)

您可以创建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")