0

JSONField이있는 모델이 있습니다. DRF 시리얼 라이저의 특정 필드 유효성 확인

class Categories(models.Model): 
    type = models.CharField(max_length=20) 
    name = models.CharField(max_length=500) 
    details = JSONField(blank=True, null=True) 

model.py

현재 나는이 위의 모델을 직렬화 serializers.ModelSerializer을 사용하고이로 인해

serializers.py

class CategoriesSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Categories 
     fields = ('id', 'type', 'name', 'details') 

은 세부 필드는 valid json을 포함하도록 선택되어 있습니다. 실제로해야 할 일은 Json 스키마 세부 정보 필드에 정의 된 일부 사용자 지정 유효성 검사를 수행하는 것입니다. 그러나 필드의 나머지 부분에 대해 다른 사용자 지정 유효성 검사를 원하지 않으므로 serializers.ModelSerializer에서 제공하는 유효성 검사를 계속 사용하고 싶습니다. 아마도 하나의 필드에 대해 유효성 검사를 무시할 수있는 방법이 있습니까?에 대해서만 사용자 지정 serializer 을 작성하면됩니까?

참고 문제는 있지만 ModelSerializer

답변

2

DRF의 시리얼이 field level 검증 옵션을 제공합니다 상속 시리얼의 필드에서 해당 사용자 정의 유효성 검사기를 사용하는 방법에 대한 사용자 지정 유효성 검사기를 작성하는 방법에 대해 없습니다. validate_details 메서드를 구현하여 세부 필드 유효성 검사를 수행 할 수 있습니다.

class CategoriesSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Categories 
     fields = ('id', 'type', 'name', 'details') 

    def validate_details(self, value): 
     if value['not_valid']: 
      raise serializers.ValidationError("Not valid") 
     return value 
+0

함수 대신 사용자 정의 유효성 검사기 클래스를 사용할 수 있습니까? 아니면'validate_details' 함수 내부에 있을까요? 'details' 필드에 대한 다양한 스키마가 있기 때문에 클래스를 사용해야합니다. 그래서 여기에서 유효성 검사기 상속을 활용하고 싶습니다. –

+0

@IshanKhare 클래스의 유효성 검사기를 전달할 수 있습니다 http://www.django-rest-framework.org/api-guide/validators/#class-base의 필드 유효성 검사기 인수 http : //www.django-rest-framework .org/api-guide/fields/# 유효성 검사기 – neverwalkaloner

+0

'validators = [MyDetailsValidator ('details')]'와 같은 것? –

관련 문제