Django/DRF范围验证

Django/DRF范围验证,django,python-2.7,django-rest-framework,Django,Python 2.7,Django Rest Framework,这更像是一个概念性的问题。我不是在寻找代码示例答案。在使用Django和DRF时,只需深入了解验证 考虑以下模型: class Store(models.Model): id = models.CharField() products = JsonField(default='[]') regexp = models.CharField(max_length=255) 我使用的是Django REST框架,我有一个序列化程序,可以为StoreView序列化此模型 我想强

这更像是一个概念性的问题。我不是在寻找代码示例答案。在使用Django和DRF时,只需深入了解验证

考虑以下模型:

class Store(models.Model):
    id = models.CharField()
    products = JsonField(default='[]')
    regexp = models.CharField(max_length=255)
我使用的是Django REST框架,我有一个序列化程序,可以为
StoreView
序列化此模型

我想强制执行一些验证。例如,我希望
产品
采用以下形式:
{“id”:x,“可选标题”:y}
,并且我希望对
regexp
执行一些正则表达式验证

我如何在一个地方执行此模型的验证,并且仍然获得正确的错误返回。所谓“正确的错误返回”,我的意思是当我从
API
客户端接收到一些错误负载时,我应该返回一个
400错误请求
,但是如果我在模型级别创建一个对象,我也应该返回一个正常的Django
ValidationError


我看不出序列化程序级别验证的优势。在我看来,如果我想保证坏对象永远不会进入数据库,我只需要在模型级别复制我的验证。

您可以在serializer类中定义
验证方法

def validate_regexp(obj,regex):
    #your regex validation goes here
    #valid_regex = .....
    if not valid_regex:
          raise serializers.ValidationError("Regex invalid")

    return regex

这根本没有解决这个问题。请再读一遍。