我正在尝试覆盖/修改我在class XXXSerializer(serializers.ModelSerializer)
的{{1}}配置中包含的外部库中定义的installed_apps
对象。
settings.py
如上所示,电子邮件的定义必须是唯一的。但是,我不想要它是独一无二的。 因此,我的问题是,覆盖此字段的最佳方式是什么?
以某种方式通过使用我想要的属性定义另一个 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。
任何建议都将不胜感激!
编辑以使请求更清晰:
想要重新定义库Apps aren't loaded yet
之外的class XXXSerializer
字段所在的字段。例如,如果我可以定义类似的内容,那将是理想的:
XXXSerializer
希望通过在我的主应用程序中执行一些代码来覆盖该类的特定class XXXSerializer(external_library.XXXSerializer):
email = serializers.CharField(default='')
字段。
答案 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='')
我认为这可以像往常一样完成工作。