我正在尝试通过API执行更新。当我推送更新时,我没有所有必需的字段,因为我只是尝试更新已更改的字段。我得到400“这个字段是必需的。”错误。
我知道该字段是必需的,但我正在尝试更新,而不是再次放入所有必填字段。这是一个PUT请求。这在我的序列化程序上调用create或update之前发生。它在is_valid()调用(我没有覆盖)上失败。老实说,没有任何相关的代码可以显示。要解决此问题,我必须覆盖is_valid并在那里提供密码吗?
例如:密码是我模型中的必填字段。但是我只推送“first_name”,因为这是唯一改变的字段。我会得到:密码“:[”此字段是必填项。“]。
答案 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."]