2015-01-12 3 views
2

Django Rest Framework 2.4를 사용하고 있습니다. 나는 두 개의 키를 포함하는 사전을 기대하고있는 API에서 :시리얼 라이저에서 중첩 된 항목의 길이를 확인하는 방법은 무엇입니까?

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

나는이 사전을 받아들이는 ItemListSerializer 있습니다. 카테고리는 카테고리 모델의 외래 키이므로 해당 데이터를 얻습니다. 카테고리

내가 그러나 진정한

많은 세트와 중첩 ItemSerializer에 의해 처리되는 항목의 목록을 제한 속성이, 나는 총 항목 수는 제한을 교차하지 않는 경우 확인하려면 카테고리를 기반으로합니까? 길이를 확인하고 ValidationError를 제기 할 수있는 시리얼에

답변

2

사용 validate() 방법은 통과하지 않는 경우

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

중첩 된 아이템 시리얼 라이저의 유효성 검사에 앞서 validate() 메소드가 호출 될까요? –

+0

@AmoghTalpallikar, 나는 그렇게 생각하지 않는다. 그것은 매우 이상 할 것이다. 아이는 부모의 확인 전에 유효해야합니다. –

+0

그게 내 사건의 문제입니다. 왜냐하면 그 색인에 따라 각 항목의 유효성을 검사 할 장소가 있기 때문입니다. 카테고리가 예상하는 것보다 더 많은 인덱스가 있으면 문제가 될 수 있으며 각 포인트에서 인덱스를 확인한 후에 validationerrors를 발생 시키면 각 아이템에 대해 오류가 발생합니다. –

1

당신은 만들 수 validate_items()

장고 나머지 프레임 워크는 필드로 오류를 표시합니다 해당 필드에 대한 오류. 그래서 응답을 파싱하는 것이 더 쉬울 것입니다.

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") 
관련 문제