相关疑难解决方法(0)

Django Rest Framework序列化程序中的自定义错误消息

这个场景很简单:

我有一个模型,其中包含一些必填字段.让我们说其中一个是TextField不可能的blank.我还有一个ModelSerializer代表该模型的(Django Rest Framework).

当使用空字符串通过序列化程序设置该字段时,返回的错误来自模型本身(This field can't be blank).

我想只在序列化程序级别覆盖错误消息,而不需要显式地重新指定序列化程序中的每个字段(我认为这是违反DRY原则),必须validate_为每个字段编写一个方法并提高我自己的ValidationError或者必须更改Model级别中的错误消息(因为有时错误消息的上下文对我的用例很重要,因此应该给出错误消息).

换句话说,有没有办法在序列化程序级别覆盖错误消息,就像它对于ModelForm:

class MyModelForm(ModelForm):
    class Meta:
        model = MyModel
        error_messages = {"field1": {"required": _("For some reason this is a custom error message overriding the model's default")}}
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

26
推荐指数
6
解决办法
2万
查看次数

如何配置Django Rest Framework以返回自定义文本的错误

我想在向数据库添加新项时自定义JSON响应,它返回以下内容.

HTTP 400 BAD REQUEST 
Content-Type: application/json Vary: 
Accept Allow: POST, OPTIONS

{
"nick": [
    "Users with this Nick already exists."
    ]
}
Run Code Online (Sandbox Code Playgroud)

{
"nick": [
    "Your username is empty"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我希望它返回(此用户名已存在,请使用其他用户名.)

要么

"Username %s already exists", (self.nick)
Run Code Online (Sandbox Code Playgroud)

我使用了以下示例,但如果值为空或无效,则无效.

def validate_title(self, attrs, source):
    """
    Check that the blog post is about Django.
    """
    value = attrs[source]
    if "django" not in value.lower():
        raise serializers.ValidationError("Blog post is not about Django")
    return attrs
Run Code Online (Sandbox Code Playgroud)

这是发送到API的JSON.

{
    "name": "myname",
    "nick":"",
    "type_account":"1",
    "email":"my-email@gmail.com",
    "pass_field":"12345" …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

10
推荐指数
1
解决办法
7715
查看次数

如何在 django rest 框架中覆盖异常消息

我正在使用基于 Django 类的视图和休息框架

object = self.get_object()
Run Code Online (Sandbox Code Playgroud)

在详细视图中,如果对象不存在并且我确实收到了类似的请求

/user/10
Run Code Online (Sandbox Code Playgroud)

然后我得到这个回应

{"detail": "not found"}
Run Code Online (Sandbox Code Playgroud)

现在我想自定义该响应

喜欢

try:
   obj = self.get_object()
except:
   raise Exception("This object does not exist")
Run Code Online (Sandbox Code Playgroud)

但这不起作用

python django django-rest-framework

8
推荐指数
2
解决办法
1万
查看次数

Django Rest Framework - 如何为所有ModelSerializer字段创建自定义错误消息?

这是我的serializers.py(我想为内置的User模型创建一个序列化器):

from rest_framework import serializers

from django.contrib.auth.models import User

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('username', 'password', 'email', )
Run Code Online (Sandbox Code Playgroud)

我知道Django Rest Framework有它自己的字段验证器,因为当我尝试使用已经存在的用户名创建用户时,它会引发一个错误:

{'username': [u'This field must be unique.']}
Run Code Online (Sandbox Code Playgroud)

我想自定义错误消息并让它说"此用户名已被占用.请再试一次"而不是说"此字段必须是唯一的".

它还有一个内置的正则表达式验证器,因为当我创建带有感叹号的用户名时,它会说:

{'username': [u'Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters.']}
Run Code Online (Sandbox Code Playgroud)

我想自定义正则表达式验证器,以便它只是说"无效的用户名".

如何自定义每个字段的所有错误消息?

注意:根据这篇文章:Django Rest Framework序列化程序中的自定义错误消息我可以这样做:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User

    def __init__(self, *args, **kwargs):
        super(UserSerializer, self).__init__(*args, **kwargs)

        self.fields['username'].error_messages['required'] = u'My custom required msg'
Run Code Online (Sandbox Code Playgroud)

但是我如何为"独特"和"正则表达式"验证器做些什么呢?我试过了

self.fields['username'].error_messages['regex'] = u'My custom …
Run Code Online (Sandbox Code Playgroud)

django validation error-handling django-serializer django-rest-framework

7
推荐指数
1
解决办法
2630
查看次数