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

Rez*_*adi 4 django django-models django-serializer django-rest-framework

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

save()但是,我想知道是否有可能从django模型的方法返回错误并转换为 django rest 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.
Run Code Online (Sandbox Code Playgroud)

注意我可以使用raise ValueErrorraise ValidationError,但它们都会在端点上导致 500 错误。但我想在我的 api 视图中返回一个响应,例如“已达到限制”

Ken*_*ars 6

DRFValidationError在序列化器中处理,因此您应该在调用模型的 save 方法时捕获任何预期的错误,并使用它来引发ValiddationError.

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

def save(self, **kwargs):
    try:
        super().save(**kwargs)
    except ModelError as e:
        raise serializers.ValidationError(e)
Run Code Online (Sandbox Code Playgroud)

ModelError您在模型中引发的错误在哪里