0

我有一个模型,其中包含JSONField验证DRF串行器中的特定字段

model.py

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

目前我使用serializers.ModelSerializer序列化这上面的模型:

serializers.py

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

由于这个原因,细节字段只检查包含valid json。我真正需要做的是根据为细节字段定义的Json Schema执行一些自定义验证。但是由于我不想为其余字段进行任何其他自定义验证,因此我想继续使用由serializers.ModelSerializer提供的验证。有什么办法可以覆盖只有一个字段的验证,可能是通过编写一个自定义序列化程序来获取详细信息字段

注意的问题不是如何编写自定义的验证,但有关如何使用自定义验证器上的一个字段串继承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-based与字段的验证器参数http://www.django-rest-framework .org/api-guide/fields /#validators – neverwalkaloner

+0

类似于'validators = [MyDetailsValidator('details')]'? –

相关问题