且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Django Rest Framework中的嵌套验证

更新时间:2023-12-02 09:59:28

JSONField仅检查字段是否包含正确的JSON结构.您需要执行此操作,并检查此JSON中的值.

JSONField just checks that a field contains correct JSON structure. You need to do it plus check values from this JSON.

有几种方法可以做到:

  1. 您可以编写自己的自定义字段类型(如果您打算在其他序列化程序中执行类似的操作,那将是很好的选择);
  2. 您可以更改字段验证(尝试类似的方法):

  1. You can write your own custom field type (it's nice if you are planning to do something similar in other serializers);
  2. You can change field validation (try something like this):

from rest_framework import serializers

class TestSerializer(serializers.Serializer)::
    test_field_a = serializers.JSONField(label='test_field_a', allow_null=False, required=True)
    test_field_b = serializers.JSONField(label='test_field_b', required=True)

    def validate_test_field_a(self, value):
        """
        Check that test_field_a .
        """
        if not isinstance(value.get('test_field_c'), int):
           raise serializers.ValidationError("Some error message")
       return value

  • 您可以尝试嵌套验证:

    from rest_framework import serializers
    
    
    class Test1Serializer(serializers.Serializer):
        test_field_c = serializers.IntegerField(label='test_field_c')
    
    
    class TestSerializer(serializers.Serializer):
        test_field_a = Test1Serializer()
        test_field_b = serializers.JSONField(label='test_field_b', required=True)