为什么模型字段验证在调用validate或validate_ <field>之前发生?

时间:2017-10-24 11:40:06

标签: django django-rest-framework django-validation

我刚开始学习Django Rest Framework,我无法理解为什么DRF在自己验证之前运行模型字段验证我有一个具有URLField的模型,基本上我只想添加http:/ /或https://在验证之前,所以写了自定义验证方法

class ShortenerSerializer(serializers.ModelSerializer):
    class Meta:
        extra_kwargs = {
            'count': {'read_only':True}
        }
        fields = ('id', 'url', 'short_url', 'count', 'created_at')
        model = Shortener

    def validate_url(self, url):
        if not 'http://' in url and not 'https://' in url:
            url = 'http://' + url
        url_validate = URLValidator()
        try:
            url_validate(url)
        except:
            raise serializers.ValidationError("Please Enter a Valid URL")
        return url

我甚至覆盖了验证方法,但在模型字段验证后再次调用它,因为它引发了异常。我想我需要覆盖一些方法,但不知道要覆盖哪一种方法。

1 个答案:

答案 0 :(得分:2)

您可以覆盖is_valid方法以避免此行为

class ShortenerSerializer(serializers.ModelSerializer):
    def is_valid(self, *args, **kwargs):
        if self.initial_data.get('url'):
            # update self.initial_data with appended url

        return super(ShortenerSerializer, self).is_valid(*args, **kwargs)