这更像是一个概念性问题。我不是在寻找代码示例答案。只需了解使用Django和DRF时的验证。
考虑以下模型:
class Store(models.Model):
id = models.CharField()
products = JsonField(default='[]')
regexp = models.CharField(max_length=255)
我正在使用Django REST Framework,我有一个序列化器,它为StoreView
序列化了这个模型。
我想要执行一些验证。例如,我希望products
采用以下格式:{"id":x, "optional-title":y}
,我想对regexp
强制执行一些正则表达式验证。
如何在一个地方强制执行此模型的验证,仍然可以获得正确的错误返回。通过'正确的错误返回',我的意思是当我从400 BAD REQUEST
客户端收到一些错误的有效负载时我应该返回API
但是如果我创建的话我也应该返回正常的Django ValidationError
模型级别的对象。
我看不到串行器级别验证的优势。在我看来,如果我想保证坏对象永远不会进入数据库,我只需要在模型级别复制我的验证。
答案 0 :(得分:0)
您可以在序列化程序类
中定义validate_<field>
方法
def validate_regexp(obj,regex):
#your regex validation goes here
#valid_regex = .....
if not valid_regex:
raise serializers.ValidationError("Regex invalid")
return regex