Django更新没有必填字段

时间:2015-06-22 03:50:27

标签: django api rest django-rest-framework

我正在尝试通过API执行更新。当我推送更新时,我没有所有必需的字段,因为我只是尝试更新已更改的字段。我得到400“这个字段是必需的。”错误。

我知道该字段是必需的,但我正在尝试更新,而不是再次放入所有必填字段。这是一个PUT请求。这在我的序列化程序上调用create或update之前发生。它在is_valid()调用(我没有覆盖)上失败。老实说,没有任何相关的代码可以显示。要解决此问题,我必须覆盖is_valid并在那里提供密码吗?

例如:密码是我模型中的必填字段。但是我只推送“first_name”,因为这是唯一改变的字段。我会得到:密码“:[”此字段是必填项。“]。

3 个答案:

答案 0 :(得分:6)

UPDATE可以通过2个请求:PUT and PATCH

PUT更新要在其上执行操作的对象的所有字段。它基本上遍历所有字段并逐个更新它们。因此,如果在提供的数据中找不到必填字段,则会引发错误。

PATCH就是我们所说的部分更新。您只能更新需要更改的字段。因此,在您的情况下,将您的请求方法更改为PATCH,您的工作将完成。

答案 1 :(得分:1)

我不确定为什么有时你会找几个小时的答案,然后问,然后立即找到答案。我只是将我的请求改为'PATCH'而不是'PUT'。

答案 2 :(得分:0)

下面的代码对我有用。

即使在许多实验中发现某些问题后,我也面临着相同的错误,所以将meta的所有字段添加到了类meta中,如下所示-

class Emp_UniSerializer( serializers.ModelSerializer ):
    class Meta:
        model = table
        fields = '__all__'  # To fetch For All Fields
        extra_kwargs = {'std_code': {'required': False},'uni_code': {'required': False},'last_name': {'required': False},'first_name': {'required': False}}

在这里,我们可以更新任何字段,它不会显示错误["This field is required."]