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')]'? –

相關問題