代码之家  ›  专栏  ›  技术社区  ›  Arti

如何将标志传递给DRF中的子序列化程序

  •  1
  • Arti  · 技术社区  · 8 年前

    我有一个嵌套的序列化程序,我想将父序列化程序数据传递给子级。但我不明白我该怎么做。我想这样做:

    class BookingSerializer(serializers.ModelSerializer):
        use_additional_fields = serializers.BooleanField()
        persons = PersonSerializer(many=True)
    
    
    
    class PersonSerializer(serializers.ModelSerializer):
    
        def validate_date_of_birth(self, value):
           if parent.use_additional_fields and not value:
              raise serializers.ValidationError(_('Date of birth is required'))
           return value
    
        class Meta:
            model = Person
            exclude = ('phone', 'date_of_birth')
    

    所以如果用户选择 use_additional_fields 在父序列化程序中,子序列化程序中的某些字段应该是必需的

    1 回复  |  直到 8 年前
        1
  •  1
  •   neverwalkaloner    8 年前

    您可以直接从请求对象获取数据:

    class PersonSerializer(serializers.ModelSerializer):
    
        def validate_date_of_birth(self, value):
           if self.context['request'].data.get('use_additional_fields') and not value:
              raise serializers.ValidationError(_('Date of birth is required'))
           return value
    
        class Meta:
            model = Person
            exclude = ('phone', 'date_of_birth')
    

    注意:如果在视图中手动启动序列化程序实例,则应将请求传递到序列化程序的 context 以下内容:

    serializer = BookingSerializer(data=data, context={'request': request})
    
    推荐文章