这就是这种情况:
我有两个序列化程序类,一个继承自另一个。
class FatherSerializer(...):
class Meta(object):
model = Person
fields = ('name', 'email', 'brother')
name = serializers.CharField()
email = serializers.EmailField()
brother = serializers.CharField()
def validate_email(self, value):
if Person.objects.filter(email=value).exists():
raise serializers.ValidationError('Such email already exists')
return value
def validate_brother(self, value):
if not Person.objects.filter(name=value).exists():
raise serializers.ValidationError('Such person doesnt exist')
return Person.objects.get(name=value)
class ChildSerializer(FatherSerializer):
class Meta(object):
model = Person
fields = ('name', 'email', 'sister')
sister = serializers.CharField()
我想对“姐妹”使用与“兄弟”相同的验证器。因为该字段的名称相同,所以它适用于电子邮件。但是,有没有一种方法可以使相同的序列化器适用于2个不同的字段?
我尝试了一个自定义验证器,方法是在两个类之外实现它,并在Field的validators
参数中使用它。但这不能正常工作,因为我希望返回的值是一个Person对象,但是我得到的只是原始输入值(即“名称”)。
谢谢。
答案 0 :(得分:1)
您可以在此处将“ FatherSerializer”用于“姐妹”字段
sister = FatherSerializer()
答案 1 :(得分:1)
您可以使用自定义验证声明自己的SiblingField
,然后在FatherSerializer
的{{1}}和brother
的{{1}}上都使用它。
ChildSerializer