Django REST Framework:当POST上存在额外字段时引发错误 [英] Django REST Framework: raise error when extra fields are present on POST

查看:57
本文介绍了Django REST Framework:当POST上存在额外字段时引发错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编写序列化程序时,很容易指定要包括哪些字段(通过 Meta fields ),并设置对它们的读/写权限并验证它们.但是,我想知道是否有一种简单的方法来指定仅 包含的字段,并且传入的任何其他键都将引发错误.

When you're writing a serializer, it is trivial to specify which fields will be included (via Meta's fields), setting read/write permissions on them and validating them. However, I was wondering if there is an easy way to specify that only the fields that are included are to be expected and any extra keys passed in should raise an error.

例如说,我有一个序列化器

E.g. say, I have a serializer

class ModelASerializer(serializers.ModelSerializer):

    class Meta:
        model = models.ModelA
        fields = ('name', 'number')

进一步假设我没有任何验证.

Supposed further that I don't have any validations.

我正在 POST 将此有效负载创建一个新实例

And I'm POSTing this payload to create a new instance

{
    "name": "test",
    "number": 5
}

一切都很好.

但是假设我的API已更改,现在我还存储了一个新字段, title ,但是忘记更新我的序列化程序.客户端将发送看起来像这样的有效载荷

But suppose my API has changed and now I'm also storing a new field, title, but forget to update my serializer. Clients will be sending payloads that look like

{
    "name": "test",
    "number": 5,
    "title": "Mr"
}

但是,序列化程序将只忽略额外的密钥,而不会引发异常.

However the serializer will simply ignore the extra key, not raising an exception.

所以,我的问题是:有没有办法使序列化器仅 期望在 fields 中指定的字段,或者-如果不是 ModelSerializer -指定为成员的字段,如果不是这种情况,则会引发错误?

So, my question is: is there any way to make a serializer only expect fields specified in fields or -- if it's not a ModelSerializer -- fields, specified as members, and raise an error if it's not the case?

推荐答案

对这个问题也很了解,发现使用

Came across this question and found that using object level validation is a bit easier. This entails simply defining a validate method:

class ModelASerializer(serializers.ModelSerializer):
    ...
    def validate(self, data):
        if hasattr(self, 'initial_data'):
            unknown_keys = set(self.initial_data.keys()) - set(self.fields.keys())
            if unknown_keys:
                raise ValidationError("Got unknown fields: {}".format(unknown_keys))
        return data

这篇关于Django REST Framework:当POST上存在额外字段时引发错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆