没有必填字段的 Django 更新
Django update without required fields
我正在尝试通过 API
执行更新。当我推送更新时,我没有所有必填字段,因为我只是想更新已更改的字段。我收到 400 "This field is required."
错误。
我知道该字段是必填字段,但我只是尝试更新,而不是再次输入所有必填字段。这是一个 PUT
请求。这发生在我的 serializers
上调用创建或更新之前。它在 is_valid()
调用(我没有覆盖)上失败。老实说,没有任何相关代码可以显示。要解决此问题,我是否必须覆盖 is_valid 并在那里提供密码?
例如:密码是我模型中的必填字段。但是我只按 "first_name" 因为那是唯一改变的字段。我会得到:password":["This field is required."]
.
我不确定为什么有时您会花几个小时寻找答案,然后提问,然后立即找到答案。我只是将请求更改为 'PATCH' 而不是 'PUT'.
UPDATE
可以通过 2 个请求实现:PUT and PATCH
PUT
更新待操作对象的所有字段。它基本上遍历所有字段并一一更新它们。因此,如果在提供的数据中找不到必填字段,则会引发错误。
PATCH
就是我们所说的部分更新。您可以仅更新需要更改的字段。因此,在您的情况下,将您的请求方法更改为 PATCH
并且您的工作将完成。
经过多次实验发现了一些问题,我遇到了同样的错误,所以在class meta中添加了serializer.py
中的所有字段,如下所示-
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."]
在序列化程序中添加 partial = True
参数:
serializer = BookSerializer(book, data=request.data, partial=True)
我正在尝试通过 API
执行更新。当我推送更新时,我没有所有必填字段,因为我只是想更新已更改的字段。我收到 400 "This field is required."
错误。
我知道该字段是必填字段,但我只是尝试更新,而不是再次输入所有必填字段。这是一个 PUT
请求。这发生在我的 serializers
上调用创建或更新之前。它在 is_valid()
调用(我没有覆盖)上失败。老实说,没有任何相关代码可以显示。要解决此问题,我是否必须覆盖 is_valid 并在那里提供密码?
例如:密码是我模型中的必填字段。但是我只按 "first_name" 因为那是唯一改变的字段。我会得到:password":["This field is required."]
.
我不确定为什么有时您会花几个小时寻找答案,然后提问,然后立即找到答案。我只是将请求更改为 'PATCH' 而不是 'PUT'.
UPDATE
可以通过 2 个请求实现:PUT and PATCH
PUT
更新待操作对象的所有字段。它基本上遍历所有字段并一一更新它们。因此,如果在提供的数据中找不到必填字段,则会引发错误。
PATCH
就是我们所说的部分更新。您可以仅更新需要更改的字段。因此,在您的情况下,将您的请求方法更改为 PATCH
并且您的工作将完成。
经过多次实验发现了一些问题,我遇到了同样的错误,所以在class meta中添加了serializer.py
中的所有字段,如下所示-
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."]
在序列化程序中添加 partial = True
参数:
serializer = BookSerializer(book, data=request.data, partial=True)