没有必填字段的 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)