修改从外部库

时间:2018-03-06 01:14:09

标签: python django

我正在尝试覆盖/修改我在class XXXSerializer(serializers.ModelSerializer)的{​​{1}}配置中包含的外部库中定义的installed_apps对象。

settings.py

如上所示,电子邮件的定义必须是唯一的。但是,我不想要它是独一无二的。 因此,我的问题是,覆盖此字段的最佳方式是什么?

一些想法/尝试:

  1. 将整个库直接复制到我的项目中,并在那里取出验证器。我认为这肯定会有效但可能不是最佳解决方案吗?
  2. 以某种方式通过使用我想要的属性定义另一个 from rest_framework import serializers class XXXSerializer(serializers.ModelSerializer): username = serializers.CharField(validators=[UniqueValidator(queryset=User.objects.all())]) email = serializers.CharField(validators=[UniqueValidator(queryset=User.objects.all())],default='') class Meta: model = User exclude = [ 'is_superuser', 'is_staff', 'is_active', 'content_type', 'groups', 'user_permissions', 'account_id', ] 来覆盖它,并使用

    YYYSerializer

    import external_library

    然而,我并不完全确定1.在哪里放置这段代码,2。正确的语法,3。这是否适用于理想的情况。当我将其放入sys.module['external_library.XXXSerializer'] = YYYSerializer.或某些settings.py文件时,会返回__init__错误 - 可能是因为尚未加载external_library。

  3. 任何建议都将不胜感激!

    编辑以使请求更清晰: 想要重新定义库Apps aren't loaded yet之外的class XXXSerializer字段所在的字段。例如,如果我可以定义类似的内容,那将是理想的:

    XXXSerializer

    希望通过在我的主应用程序中执行一些代码来覆盖该类的特定class XXXSerializer(external_library.XXXSerializer): email = serializers.CharField(default='') 字段。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,那么您正尝试override/remove 唯一电子邮件约束。首先,它是一个传递给相应类的参数,因此只需删除参数即可删除验证条件,如下所示

email = serializers.CharField(default='')


默认validators类的CharField()参数为None

覆盖CharField()班级 要覆盖CharField()类,请执行以下操作

class SubCharFieldClass(serializers.CharField):
    #do some overriding process

class MySerializerClass(serializers.ModelSerializer):
    email = SubCharFieldClass()
    # other fields



更新

class MySerializer(XXXSerializer):
    email = serializers.CharField(default='')


我认为这可以像往常一样完成工作。