Django:在模型save()方法中返回序列化程序ValidationError

时间:2019-01-06 11:26:46

标签: django django-models django-rest-framework django-serializer

我使用django-rest-framework在Django框架内创建Rest API。并且可以返回序列化器方法之外的任何char *

但是,我想知道是否有可能从Django 模型validationError方法返回错误并将其转换为django rest save()

例如,假设我想限制在特定表上创建对象。像这样:

validationError

注意,我可以使用class CustomTable(models.Model): ... # modles fields go here def save(): if CustomTable.objects.count() > 2: # Return a validationError in any serializer that is connected to this model. raise ValueError,但是它们都会在端点上导致500错误。但是我想在我的api视图中返回一个响应,例如说“已达到限制”

2 个答案:

答案 0 :(得分:1)

DRF ValidationError是在序列化程序中处理的,因此在调用模型的save方法并使用它引发ValiddationError时应捕获任何预期的错误。

例如,您可以在序列化程序的save方法中执行此操作:

def save(self, **kwargs):
    try:
        super().save(**kwargs)
    except ModelError as e:
        raise serializers.ValidationError(e)

ModelError是您在模型中提出的错误

答案 1 :(得分:0)

有两种或三种方法可以做到这一点

1。使用clean方法。

Environment.Exit
  1. 使用Signals

    class CustomTable(models.Model):
        ... # modles fields go here
    
        def clean(self):
         if CustomTable.objects.count() > 2:
                    raise ValidationError(_('custom table can not have more than two entries.'))