问题描述
我使用django-rest-framework在Django框架内创建Rest API。除了序列化程序方法之外,还可能返回任何 validationError
。
但是,我想知道是否有可能返回错误从django 模型的 save()
方法转换为django rest validationError
的方法?
例如,假设我想限制在特定表上创建对象。像这样:
class CustomTable(models.Model):
...#modles字段在这里
def save():如果CustomTable.objects.count()> 2:
#在连接到该模型的任何序列化器中返回一个validationError。
注意我可以使用 raise ValueError
或 raise ValidationError
,但它们都会在端点上引起500错误。但是我想在我的api视图中返回一个响应,说例如已达到限制
DRF ValidationError
在序列化程序中处理,因此在调用模型的save方法并使用它引发 ValiddationError
时,您应该捕获任何预期的错误。 / p>
例如,您可以在序列化程序的保存方法中执行以下操作:
def save(self,** kwargs):
try:
super()。save(** kwargs)
除了ModelError以外,例如e:
提高serializers.ValidationError(e )
其中 ModelError
是您的错误,在模型中重新筹集资金
I use django-rest-framework to create Rest API within Django framework. And it's possible to return any validationError
beside serializer methods.
But, I was wondering is it possible to return errors from save()
method of django model that be translated to django rest validationError
?
For example imagine I want to limit creating objects on a specific table. like this:
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.
Note I could use raise ValueError
or raise ValidationError
, but they all cause 500 error on endpoint. But i want to return a response in my api view that says for example 'limit reached'
The DRF ValidationError
is handled in the serializer so you should catch any expected errors when calling your model's save method and use it to raise a ValiddationError
.
For example, you could do this in your serializer's save method:
def save(self, **kwargs):
try:
super().save(**kwargs)
except ModelError as e:
raise serializers.ValidationError(e)
Where ModelError
is the error you're raising in your model
这篇关于Django:在模型save()方法中返回序列化程序ValidationError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!