0

i have parent class that is AccessSerializer and child class AccessInternalSerializer like below,

class AccessSerializer(AccessBaseSerializer):

    external_iam_fields = ExternalIamFieldsSerializer(
        allow_null=True, required=False)

    private_key = serializers.FileField(
        write_only=True,
        allow_null=True,
        required=False)

    ca_cert = serializers.FileField(
        write_only=True,
        allow_null=True,
        required=False)

    class Meta(AccessBaseSerializer.Meta):
        model = Access
        optional_fields = AccessBaseSerializer.Meta.optional_fields + \
            ('type', 'external_iam_fields', 'ca_cert',
                'username', 'password', 'private_key', 'privileged_username',
                'privileged_password', 'priv_escalation','set_hidden_fields')
        extra_kwargs = {
            'username': {
                'write_only': True
             },
             'password': {
                 'write_only': True,
                 'trim_whitespace': False
             },
             'privileged_username': {
                 'write_only': True
             },
             'privileged_password': {
                 'write_only': True,
                 'trim_whitespace': False
             }, 
             'private_key': {
                 'write_only': True 
             },
             'ca_cert': {
                 'write_only': True
             },
             'external_iam_fields': {
                 'read_only': True
             },
         }


class AccessInternalSerializer(AccessSerializer):
    private_key = serializers.FileField(
        allow_null=True,
        required=False)

    ca_cert = serializers.FileField(
        allow_null=True,
        required=False)

    class Meta(AccessSerializer.Meta):
        model = Access
        optional_fields = AccessSerializer.Meta.optional_fields 
        // here i want  
        //all optional fields set in AccessSerializer but should 
         //remove 
        //set_hidden_fields

        extra_kwargs = {
            //here password field should not be writeonly as in parent class
            //here privileged_password should not be writeonly as in parent class
            //username should not be writeonly as in parent class
            // private_key should not be writeonly as in parent class
            // ca_cert should not be writeonly as in parent class

            'external_iam_fields': {
                'read_only': True
             },
    
         }
       
         def to_representation(self, obj):
             data = super().to_representation(obj)
             data['ssh_private_key'] = obj.ssh_private_key
             data['ca_certificate'] = obj.ca_certificate
             return data

what i am trying to do?

so as seen in above code, in the parent class AccessSerializer we are setting private_key, username, ca_cert, privileged_username, privileged_password to write_only: True. this means these fields are not shown in api response.

but in child class AccessInternalSerializer i want to remove the setting write_only: True for above fields (private_key, username, ca_cert, privileged_username, privileged_password) such that these fields are shown in api response.

also in parent class i have set set_hidden_fields to optional_fields. but in child class i want to remove set_hidden_field from optional_fields. this means i want to show set_hidden_field in parent class api response and not shown in child class api response.

how can i do it. could someone help me do this. i am new to python thanks.

stackuser
  • 253
  • 1
  • 2
  • 14

0 Answers0