Python 不同字段的同一验证器
情况就是这样: 我有两个序列化程序类,一个从另一个继承Python 不同字段的同一验证器,python,django-rest-framework,Python,Django Rest Framework,情况就是这样: 我有两个序列化程序类,一个从另一个继承 class FatherSerializer(...): class Meta(object): model = Person fields = ('name', 'email', 'brother') name = serializers.CharField() email = serializers.EmailField() brother = serializers.C
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()
我想对“姐妹”使用与“兄弟”相同的验证器。它适用于电子邮件,因为字段的名称是相同的。但是,有没有一种方法可以使同一个序列化程序适用于两个不同的字段
我尝试了一个自定义验证器,在两个类之外实现它,并在字段的validators
参数中使用它。但它不能正常工作,因为我希望返回的值是Person对象,但我得到的只是原始输入值(所以称为“name”)
提前谢谢。您可以在“姐妹”字段中使用FatherSerializer
sister = FatherSerializer()
您可以在“姐妹”字段中使用FatherSerializer
sister = FatherSerializer()
您可以使用自定义验证声明自己的
同级字段
,然后在父序列化程序
上为兄弟
使用它,在子序列化程序
上为姐妹
使用它
class SiblingField(serializers.CharField):
<add your custom validation methods here>
class FatherSerializer(...):
brother = SiblingField()
class ChildSerializer(FatherSerializer):
sister = SiblingField()
类同级字段(serializers.CharField):
类FatherSerializer(…):
brother=SiblingField()
类子序列化程序(父序列化程序):
sister=SiblingField()
您可以通过自定义验证声明自己的同级字段
,然后在父序列化程序
上为兄弟
使用它,在子序列化程序
上为姐妹
使用它
class SiblingField(serializers.CharField):
<add your custom validation methods here>
class FatherSerializer(...):
brother = SiblingField()
class ChildSerializer(FatherSerializer):
sister = SiblingField()
类同级字段(serializers.CharField):
类FatherSerializer(…):
brother=SiblingField()
类子序列化程序(父序列化程序):
sister=SiblingField()
那么,你是建议让姐妹
而不是CharField
成为FatherSerializer
类的对象?这使得sister
希望词典符合FatherSerializer
的需要。。所以不要像这样工作。那么你是建议作为sister
而不是CharField
成为FatherSerializer
类的对象?这使得sister
希望词典符合FatherSerializer
的需要。。所以不要像这样工作。是的,这是有道理的。谢谢!;)是的,这很有道理。谢谢!;)