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.