我目前正在将Django rest_framework的serializers.WritableField
扩展为(毫不奇怪)将数据转换为更加前端友好的格式。我的代码如下所示:
class FooField(serializers.WritableField):
def from_native(self, value):
return #makeFoo
def to_native(self, value):
return #undoFoo
然后我有一个看起来像这样的序列化器:
class FooUsingSerializer(serializers.ModelSerializer):
the_field = FooField(source='a_model_field')
def validate_the_field(self,attrs):
#validate result
return attrs
问题是,在调用validate_the_field之前调用from_native并且原始数据甚至没有传递给validate_the_field,因此如果传入垃圾数据(在我的特定情况下,它将是任何不是有效日期的东西) )而不是validate_the_field捕获它,我将返回500错误。我考虑过这样的事情:
def from_native(self, value):
try:
return #makeFoo
except:
return #a flag to show that the data wasn't valid
但这只是一种处理问题的hacky方式,特别是因为Django rest_framework通常很干净。有没有人知道处理与from_native一起使用的垃圾数据的方法?
答案 0 :(得分:0)
实际上,如果您查看DRF代码,您会看到许多扩展WritableField
的字段都经过验证。我们来看DecimalField
,例如:
class DecimalField(WritableField):
def from_native(self, value):
...
try:
value = Decimal(value)
except DecimalException:
raise ValidationError(self.error_messages['invalid'])
return value