首页 > 解决方案 > 如何使用python和django覆盖子类中的父类方法?

问题描述

我不想使用在父类中定义的 to_representation 方法在子类中使用。

我有一个父类 AccessInternalSerializer 和子类 AccessSerializer。下面是我的代码,

class AccessInternalSerializer(AccessBaseSerializer):
    private_key = serializers.FileField(
        allow_null = True,
        required=False)
    ca_cert = serializers.FileField(
        allow_null = True,
        required=False)
    class Meta(AccessBaseSerializer.Meta):
        model = Access
        extra_kwargs = {
            'password': {
                'trim_whitespace': False
             }
         }
        

class AccessSerializer(AccessInternalSerializer):
    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(AcessInternalSerializer.Meta):
        extra_kwargs = {
            **AccessInternalSerializer.Meta.extra.kwargs,
            'private_key': {
                 'write_only': True
             }
             'ca_cert': {
                 'write_only': True
             }
         }

上面的代码有效。但是 AccessusernameInternalSerializer 没有在输出中返回 private_key 和 ca_cert 字段,因此我在 AccessInternalSerializer 中使用了 to_representation,如下所示,

class AccessInternalSerializer(AccessBaseSerializer):
 
    private_key = serializers.FileField(
        allow_null = True,
        required=False)
    ca_cert = serializers.FileField(
        allow_null = True,
        required=False)
    def to_representation(self, obj):
        data = super().to_representation(obj)
        data['private_key'] = obj.private_key
        data['ca_cert'] = obj.ca_cert
        return data

    class Meta(AccessBaseSerializer.Meta):
        model = Access
        extra_kwargs = {
            'password': {
                'trim_whitespace': False
             }
         }

上面的代码有效。它在输出中返回 private_key 和 ca_cert 字段。但它也会在 AccessSerializer 类(子类)中返回这些字段 private_key 和 ca_cert 字段

我认为这是因为 AccessInternalSerializer(即父类)中的 to_representation 在子类 AccessSerializer 中被继承。

我不希望在 AccessSerializer 类输出中返回这些字段 private_key 和 ca_cert 字段。

我怎样才能解决这个问题。有人可以帮我解决这个问题。我是 python 和 django 的新手。谢谢。

标签: pythondjango

解决方案


推荐阅读